diff --git a/examples/kernels b/examples/kernels index f167b2d49ac4a56faea58b801bf8f0da24f66789..3109f5227506745635f0bd4711d299925cb84345 100644 --- a/examples/kernels +++ b/examples/kernels @@ -1,775 +1,770 @@ digraph AST { node [color=lightblue2 style=filled] size="6,6" - n139969368120288 [label=Block] - n139969367650200 [label=Module] - n139969368120288 -> n139969367650200 - n139969367650256 [label=Module] - n139969368120288 -> n139969367650256 - n139969367650200 [label=Module] - n139969367650144 [label=Block] - n139969367650200 -> n139969367650144 - n139969367650144 [label=Block] - n139969367647400 [label=ParticleFor] - n139969367650144 -> n139969367647400 - n139969367647400 [label=ParticleFor] - n139969366898952 [label=Block] - n139969367647400 -> n139969366898952 - n139969370135744 [label=nlocal] - n139969367647400 -> n139969370135744 - n139969366898952 [label=Block] - n139969366899120 [label=For] - n139969366898952 -> n139969366899120 - n139969366899400 [label="*"] - n139969366898784 [label="Iter(14)"] - n139969366899400 -> n139969366898784 - n139969367646952 [label=neighborlist_capacity] - n139969366899400 -> n139969367646952 - n139969366898784 [label="Iter(14)"] - n139969367646952 [label=neighborlist_capacity] - n139969366899624 [label=PropertyAccess] - n139969368120512 [label=position] - n139969366899624 -> n139969368120512 - n139969366898784 [label="Iter(14)"] - n139969366899624 -> n139969366898784 - n139969366925440 [label="*"] - n139969366899624 -> n139969366925440 - n139969366927288 [label="+"] - n139969366899624 -> n139969366927288 - n139969366929080 [label="+"] - n139969366899624 -> n139969366929080 - n139969368120512 [label=position] - n139969366925440 [label="*"] - n139969366898784 [label="Iter(14)"] - n139969366925440 -> n139969366898784 - n139969366925496 [label=3] - n139969366925440 -> n139969366925496 - n139969366925496 [label=3] - n139969366927288 [label="+"] - n139969366927120 [label="*"] - n139969366927288 -> n139969366927120 - n139969366927344 [label=1] - n139969366927288 -> n139969366927344 - n139969366927120 [label="*"] - n139969366898784 [label="Iter(14)"] - n139969366927120 -> n139969366898784 - n139969366927176 [label=3] - n139969366927120 -> n139969366927176 - n139969366927176 [label=3] - n139969366927344 [label=1] - n139969366929080 [label="+"] - n139969366928912 [label="*"] - n139969366929080 -> n139969366928912 - n139969366929136 [label=2] - n139969366929080 -> n139969366929136 - n139969366928912 [label="*"] - n139969366898784 [label="Iter(14)"] - n139969366928912 -> n139969366898784 - n139969366928968 [label=3] - n139969366928912 -> n139969366928968 - n139969366928968 [label=3] - n139969366929136 [label=2] - n139969366900016 [label="*"] - n139969366898784 [label="Iter(14)"] - n139969366900016 -> n139969366898784 - n139969366900072 [label=3] - n139969366900016 -> n139969366900072 - n139969366900072 [label=3] - n139969366926336 [label="*"] - n139969366898784 [label="Iter(14)"] - n139969366926336 -> n139969366898784 - n139969366926392 [label=3] - n139969366926336 -> n139969366926392 - n139969366926392 [label=3] - n139969366926504 [label="+"] - n139969366926336 [label="*"] - n139969366926504 -> n139969366926336 - n139969366926560 [label=1] - n139969366926504 -> n139969366926560 - n139969366926560 [label=1] - n139969366928128 [label="*"] - n139969366898784 [label="Iter(14)"] - n139969366928128 -> n139969366898784 - n139969366928184 [label=3] - n139969366928128 -> n139969366928184 - n139969366928184 [label=3] - n139969366928296 [label="+"] - n139969366928128 [label="*"] - n139969366928296 -> n139969366928128 - n139969366928352 [label=2] - n139969366928296 -> n139969366928352 - n139969366928352 [label=2] - n139969367692344 [label="*"] - n139969366898784 [label="Iter(14)"] - n139969367692344 -> n139969366898784 - n139969367692288 [label=3] - n139969367692344 -> n139969367692288 - n139969367692288 [label=3] - n139969367691616 [label="*"] - n139969366898784 [label="Iter(14)"] - n139969367691616 -> n139969366898784 - n139969367691672 [label=3] - n139969367691616 -> n139969367691672 - n139969367691672 [label=3] - n139969367692120 [label="*"] - n139969366898784 [label="Iter(14)"] - n139969367692120 -> n139969366898784 - n139969367692176 [label=3] - n139969367692120 -> n139969367692176 - n139969367692176 [label=3] - n139969367692456 [label="+"] - n139969367692120 [label="*"] - n139969367692456 -> n139969367692120 - n139969367692512 [label=1] - n139969367692456 -> n139969367692512 - n139969367692512 [label=1] - n139969367692624 [label="*"] - n139969366898784 [label="Iter(14)"] - n139969367692624 -> n139969366898784 - n139969367692680 [label=3] - n139969367692624 -> n139969367692680 - n139969367692680 [label=3] - n139969367694024 [label="+"] - n139969367692624 [label="*"] - n139969367694024 -> n139969367692624 - n139969367692792 [label=1] - n139969367694024 -> n139969367692792 - n139969367692792 [label=1] - n139969367694248 [label="*"] - n139969366898784 [label="Iter(14)"] - n139969367694248 -> n139969366898784 - n139969367694640 [label=3] - n139969367694248 -> n139969367694640 - n139969367694640 [label=3] - n139969367694808 [label="+"] - n139969367694248 [label="*"] - n139969367694808 -> n139969367694248 - n139969367695088 [label=2] - n139969367694808 -> n139969367695088 - n139969367695088 [label=2] - n139969367695256 [label="*"] - n139969366898784 [label="Iter(14)"] - n139969367695256 -> n139969366898784 - n139969367695312 [label=3] - n139969367695256 -> n139969367695312 - n139969367695312 [label=3] - n139969367826560 [label="+"] - n139969367695256 [label="*"] - n139969367826560 -> n139969367695256 - n139969367826616 [label=2] - n139969367826560 -> n139969367826616 - n139969367826616 [label=2] - n139969366899120 [label=For] - n139969366899176 [label="Iter(15)"] - n139969366899120 -> n139969366899176 - n139969366899288 [label=Block] - n139969366899120 -> n139969366899288 - n139969366899232 [label=0] - n139969366899120 -> n139969366899232 - n139969366899064 [label=ArrayAccess] - n139969366899120 -> n139969366899064 - n139969366899176 [label="Iter(15)"] - n139969366899288 [label=Block] - n139969366958768 [label=Filter] - n139969366899288 -> n139969366958768 - n139969366899512 [label="+"] - n139969366899400 [label="*"] - n139969366899512 -> n139969366899400 - n139969366899176 [label="Iter(15)"] - n139969366899512 -> n139969366899176 - n139969366899736 [label=PropertyAccess] - n139969368120512 [label=position] - n139969366899736 -> n139969368120512 - n139969366899344 [label=ArrayAccess] - n139969366899736 -> n139969366899344 - n139969366925776 [label="*"] - n139969366899736 -> n139969366925776 - n139969366927624 [label="+"] - n139969366899736 -> n139969366927624 - n139969366958152 [label="+"] - n139969366899736 -> n139969366958152 - n139969366899344 [label=ArrayAccess] - n139969367647008 [label=neighborlists] - n139969366899344 -> n139969367647008 - n139969366899512 [label="+"] - n139969366899344 -> n139969366899512 - n139969367647008 [label=neighborlists] - n139969366925776 [label="*"] - n139969366899344 [label=ArrayAccess] - n139969366925776 -> n139969366899344 - n139969366925832 [label=3] - n139969366925776 -> n139969366925832 - n139969366925832 [label=3] - n139969366927624 [label="+"] - n139969366927456 [label="*"] - n139969366927624 -> n139969366927456 - n139969366927680 [label=1] - n139969366927624 -> n139969366927680 - n139969366927456 [label="*"] - n139969366899344 [label=ArrayAccess] - n139969366927456 -> n139969366899344 - n139969366927512 [label=3] - n139969366927456 -> n139969366927512 - n139969366927512 [label=3] - n139969366927680 [label=1] - n139969366958152 [label="+"] - n139969366929248 [label="*"] - n139969366958152 -> n139969366929248 - n139969366958208 [label=2] - n139969366958152 -> n139969366958208 - n139969366929248 [label="*"] - n139969366899344 [label=ArrayAccess] - n139969366929248 -> n139969366899344 - n139969366929304 [label=3] - n139969366929248 -> n139969366929304 - n139969366929304 [label=3] - n139969366958208 [label=2] - n139969366899848 [label="-"] - n139969366899624 [label=PropertyAccess] - n139969366899848 -> n139969366899624 - n139969366899736 [label=PropertyAccess] - n139969366899848 -> n139969366899736 - n139969366900352 [label="*"] - n139969366899344 [label=ArrayAccess] - n139969366900352 -> n139969366899344 - n139969366900408 [label=3] - n139969366900352 -> n139969366900408 - n139969366900408 [label=3] - n139969366926168 [label="*"] - n139969366900688 [label=VectorAccess] - n139969366926168 -> n139969366900688 - n139969366926112 [label=VectorAccess] - n139969366926168 -> n139969366926112 - n139969366900688 [label=VectorAccess] - n139969366899848 [label="-"] - n139969366900688 -> n139969366899848 - n139969366926112 [label=VectorAccess] - n139969366899848 [label="-"] - n139969366926112 -> n139969366899848 - n139969366926672 [label="*"] - n139969366899344 [label=ArrayAccess] - n139969366926672 -> n139969366899344 - n139969366926728 [label=3] - n139969366926672 -> n139969366926728 - n139969366926728 [label=3] - n139969366926840 [label="+"] - n139969366926672 [label="*"] - n139969366926840 -> n139969366926672 - n139969366926896 [label=1] - n139969366926840 -> n139969366926896 - n139969366926896 [label=1] - n139969366927848 [label="*"] - n139969366927008 [label=VectorAccess] - n139969366927848 -> n139969366927008 - n139969366927792 [label=VectorAccess] - n139969366927848 -> n139969366927792 - n139969366927008 [label=VectorAccess] - n139969366899848 [label="-"] - n139969366927008 -> n139969366899848 - n139969366927792 [label=VectorAccess] - n139969366899848 [label="-"] - n139969366927792 -> n139969366899848 - n139969366927960 [label="+"] - n139969366926168 [label="*"] - n139969366927960 -> n139969366926168 - n139969366927848 [label="*"] - n139969366927960 -> n139969366927848 - n139969366928464 [label="*"] - n139969366899344 [label=ArrayAccess] - n139969366928464 -> n139969366899344 - n139969366928520 [label=3] - n139969366928464 -> n139969366928520 - n139969366928520 [label=3] - n139969366928632 [label="+"] - n139969366928464 [label="*"] - n139969366928632 -> n139969366928464 - n139969366928688 [label=2] - n139969366928632 -> n139969366928688 - n139969366928688 [label=2] - n139969366958376 [label="*"] - n139969366928800 [label=VectorAccess] - n139969366958376 -> n139969366928800 - n139969366958320 [label=VectorAccess] - n139969366958376 -> n139969366958320 - n139969366928800 [label=VectorAccess] - n139969366899848 [label="-"] - n139969366928800 -> n139969366899848 - n139969366958320 [label=VectorAccess] - n139969366899848 [label="-"] - n139969366958320 -> n139969366899848 - n139969366958488 [label="+"] - n139969366927960 [label="+"] - n139969366958488 -> n139969366927960 - n139969366958376 [label="*"] - n139969366958488 -> n139969366958376 - n139969366958600 [label="<"] - n139969366958488 [label="+"] - n139969366958600 -> n139969366958488 - n139969366958656 [label=2.5] - n139969366958600 -> n139969366958656 - n139969366958656 [label=2.5] - n139969366958768 [label=Filter] - n139969366958600 [label="<"] - n139969366958768 -> n139969366958600 - n139969367650088 [label=Block] - n139969366958768 -> n139969367650088 - n139969367650088 [label=Block] - n139969367693296 [label=Assign] - n139969367650088 -> n139969367693296 - n139969367694976 [label="/"] - n139969367694864 [label=1.0] - n139969367694976 -> n139969367694864 - n139969366958488 [label="+"] - n139969367694976 -> n139969366958488 - n139969367694864 [label=1.0] - n139969367694696 [label="*"] - n139969367694976 [label="/"] - n139969367694696 -> n139969367694976 - n139969367694976 [label="/"] - n139969367694696 -> n139969367694976 - n139969367694472 [label="*"] - n139969367694696 [label="*"] - n139969367694472 -> n139969367694696 - n139969367694976 [label="/"] - n139969367694472 -> n139969367694976 - n139969367694920 [label=PropertyAccess] - n139969368120624 [label=force] - n139969367694920 -> n139969368120624 - n139969366898784 [label="Iter(14)"] - n139969367694920 -> n139969366898784 - n139969367691616 [label="*"] - n139969367694920 -> n139969367691616 - n139969367694024 [label="+"] - n139969367694920 -> n139969367694024 - n139969367826560 [label="+"] - n139969367694920 -> n139969367826560 - n139969368120624 [label=force] - n139969367693856 [label="*"] - n139969366899848 [label="-"] - n139969367693856 -> n139969366899848 - n139969367693744 [label=48.0] - n139969367693856 -> n139969367693744 - n139969367693744 [label=48.0] - n139969367693632 [label="*"] - n139969366899848 [label="-"] - n139969367693632 -> n139969366899848 - n139969367370328 [label="*"] - n139969367693632 -> n139969367370328 - n139969367370328 [label="*"] - n139969367693744 [label=48.0] - n139969367370328 -> n139969367693744 - n139969367694472 [label="*"] - n139969367370328 -> n139969367694472 - n139969367693464 [label="-"] - n139969367694472 [label="*"] - n139969367693464 -> n139969367694472 - n139969367693520 [label=0.5] - n139969367693464 -> n139969367693520 - n139969367693520 [label=0.5] - n139969367693352 [label="*"] - n139969366899848 [label="-"] - n139969367693352 -> n139969366899848 - n139969367370440 [label="*"] - n139969367693352 -> n139969367370440 - n139969367370440 [label="*"] - n139969367370328 [label="*"] - n139969367370440 -> n139969367370328 - n139969367693464 [label="-"] - n139969367370440 -> n139969367693464 - n139969367692904 [label="*"] - n139969366899848 [label="-"] - n139969367692904 -> n139969366899848 - n139969366959328 [label="*"] - n139969367692904 -> n139969366959328 - n139969366959328 [label="*"] - n139969367370440 [label="*"] - n139969366959328 -> n139969367370440 - n139969367694976 [label="/"] - n139969366959328 -> n139969367694976 - n139969367693016 [label="*"] - n139969366899848 [label="-"] - n139969367693016 -> n139969366899848 - n139969366959328 [label="*"] - n139969367693016 -> n139969366959328 - n139969367693240 [label="+"] - n139969367694920 [label=PropertyAccess] - n139969367693240 -> n139969367694920 - n139969367693016 [label="*"] - n139969367693240 -> n139969367693016 - n139969367693296 [label=Assign] - n139969367692008 [label=VectorAccess] - n139969367693296 -> n139969367692008 - n139969367691560 [label=VectorAccess] - n139969367693296 -> n139969367691560 - n139969367694192 [label=VectorAccess] - n139969367693296 -> n139969367694192 - n139969367692568 [label=VectorAccess] - n139969367693296 -> n139969367692568 - n139969367826784 [label=VectorAccess] - n139969367693296 -> n139969367826784 - n139969367695200 [label=VectorAccess] - n139969367693296 -> n139969367695200 - n139969367692008 [label=VectorAccess] - n139969367694920 [label=PropertyAccess] - n139969367692008 -> n139969367694920 - n139969367691560 [label=VectorAccess] - n139969367693240 [label="+"] - n139969367691560 -> n139969367693240 - n139969367694192 [label=VectorAccess] - n139969367694920 [label=PropertyAccess] - n139969367694192 -> n139969367694920 - n139969367692568 [label=VectorAccess] - n139969367693240 [label="+"] - n139969367692568 -> n139969367693240 - n139969367826784 [label=VectorAccess] - n139969367694920 [label=PropertyAccess] - n139969367826784 -> n139969367694920 - n139969367695200 [label=VectorAccess] - n139969367693240 [label="+"] - n139969367695200 -> n139969367693240 - n139969366899232 [label=0] - n139969366899064 [label=ArrayAccess] - n139969367647064 [label=numneighs] - n139969366899064 -> n139969367647064 - n139969366898784 [label="Iter(14)"] - n139969366899064 -> n139969366898784 - n139969367647064 [label=numneighs] - n139969370135744 [label=nlocal] - n139969367650256 [label=Module] - n139969367647512 [label=Block] - n139969367650256 -> n139969367647512 - n139969367647512 [label=Block] - n139969367649808 [label=ParticleFor] - n139969367647512 -> n139969367649808 - n139969367649808 [label=ParticleFor] - n139969367647736 [label=Block] - n139969367649808 -> n139969367647736 - n139969370135744 [label=nlocal] - n139969367649808 -> n139969370135744 - n139969367647736 [label=Block] - n139969367827568 [label=Assign] - n139969367647736 -> n139969367827568 - n139969367344464 [label=Assign] - n139969367647736 -> n139969367344464 - n139969367826896 [label=PropertyAccess] - n139969368120568 [label=velocity] - n139969367826896 -> n139969368120568 - n139969367648800 [label="Iter(0)"] - n139969367826896 -> n139969367648800 - n139969367828072 [label="*"] - n139969367826896 -> n139969367828072 - n139969367829808 [label="+"] - n139969367826896 -> n139969367829808 - n139969367343680 [label="+"] - n139969367826896 -> n139969367343680 - n139969368120568 [label=velocity] - n139969367648800 [label="Iter(0)"] - n139969367828072 [label="*"] - n139969367648800 [label="Iter(0)"] - n139969367828072 -> n139969367648800 - n139969367828464 [label=3] - n139969367828072 -> n139969367828464 - n139969367828464 [label=3] - n139969367829808 [label="+"] - n139969367829304 [label="*"] - n139969367829808 -> n139969367829304 - n139969367829864 [label=1] - n139969367829808 -> n139969367829864 - n139969367829304 [label="*"] - n139969367648800 [label="Iter(0)"] - n139969367829304 -> n139969367648800 - n139969367829696 [label=3] - n139969367829304 -> n139969367829696 - n139969367829696 [label=3] - n139969367829864 [label=1] - n139969367343680 [label="+"] - n139969367343176 [label="*"] - n139969367343680 -> n139969367343176 - n139969367343736 [label=2] - n139969367343680 -> n139969367343736 - n139969367343176 [label="*"] - n139969367648800 [label="Iter(0)"] - n139969367343176 -> n139969367648800 - n139969367343568 [label=3] - n139969367343176 -> n139969367343568 - n139969367343568 [label=3] - n139969367343736 [label=2] - n139969367827008 [label=PropertyAccess] - n139969368120624 [label=force] - n139969367827008 -> n139969368120624 - n139969367648800 [label="Iter(0)"] - n139969367827008 -> n139969367648800 - n139969367828128 [label="*"] - n139969367827008 -> n139969367828128 - n139969367829528 [label="+"] - n139969367827008 -> n139969367829528 - n139969367343400 [label="+"] - n139969367827008 -> n139969367343400 - n139969367828128 [label="*"] - n139969367648800 [label="Iter(0)"] - n139969367828128 -> n139969367648800 - n139969367828184 [label=3] - n139969367828128 -> n139969367828184 - n139969367828184 [label=3] - n139969367829528 [label="+"] - n139969367829360 [label="*"] - n139969367829528 -> n139969367829360 - n139969367829584 [label=1] - n139969367829528 -> n139969367829584 - n139969367829360 [label="*"] - n139969367648800 [label="Iter(0)"] - n139969367829360 -> n139969367648800 - n139969367829416 [label=3] - n139969367829360 -> n139969367829416 - n139969367829416 [label=3] - n139969367829584 [label=1] - n139969367343400 [label="+"] - n139969367343232 [label="*"] - n139969367343400 -> n139969367343232 - n139969367343456 [label=2] - n139969367343400 -> n139969367343456 - n139969367343232 [label="*"] - n139969367648800 [label="Iter(0)"] - n139969367343232 -> n139969367648800 - n139969367343288 [label=3] - n139969367343232 -> n139969367343288 - n139969367343288 [label=3] - n139969367343456 [label=2] - n139969367827120 [label="*"] - n139969367827176 [label=0.005] - n139969367827120 -> n139969367827176 - n139969367827008 [label=PropertyAccess] - n139969367827120 -> n139969367827008 - n139969367827176 [label=0.005] - n139969367827288 [label=PropertyAccess] - n139969368120456 [label=mass] - n139969367827288 -> n139969368120456 - n139969367648800 [label="Iter(0)"] - n139969367827288 -> n139969367648800 - n139969368120456 [label=mass] - n139969367827344 [label="/"] - n139969367827120 [label="*"] - n139969367827344 -> n139969367827120 - n139969367827288 [label=PropertyAccess] - n139969367827344 -> n139969367827288 - n139969367827456 [label="+"] - n139969367826896 [label=PropertyAccess] - n139969367827456 -> n139969367826896 - n139969367827344 [label="/"] - n139969367827456 -> n139969367827344 - n139969367827680 [label="*"] - n139969367648800 [label="Iter(0)"] - n139969367827680 -> n139969367648800 - n139969367827736 [label=3] - n139969367827680 -> n139969367827736 - n139969367827736 [label=3] - n139969367828912 [label="*"] - n139969367648800 [label="Iter(0)"] - n139969367828912 -> n139969367648800 - n139969367828968 [label=3] - n139969367828912 -> n139969367828968 - n139969367828968 [label=3] - n139969367829080 [label="+"] - n139969367828912 [label="*"] - n139969367829080 -> n139969367828912 - n139969367829136 [label=1] - n139969367829080 -> n139969367829136 - n139969367829136 [label=1] - n139969367830144 [label="*"] - n139969367648800 [label="Iter(0)"] - n139969367830144 -> n139969367648800 - n139969367830200 [label=3] - n139969367830144 -> n139969367830200 - n139969367830200 [label=3] - n139969367830312 [label="+"] - n139969367830144 [label="*"] - n139969367830312 -> n139969367830144 - n139969367830368 [label=2] - n139969367830312 -> n139969367830368 - n139969367830368 [label=2] - n139969367827568 [label=Assign] - n139969367828800 [label=VectorAccess] - n139969367827568 -> n139969367828800 - n139969367828016 [label=VectorAccess] - n139969367827568 -> n139969367828016 - n139969367830032 [label=VectorAccess] - n139969367827568 -> n139969367830032 - n139969367829248 [label=VectorAccess] - n139969367827568 -> n139969367829248 - n139969367343904 [label=VectorAccess] - n139969367827568 -> n139969367343904 - n139969367830480 [label=VectorAccess] - n139969367827568 -> n139969367830480 - n139969367828800 [label=VectorAccess] - n139969367826896 [label=PropertyAccess] - n139969367828800 -> n139969367826896 - n139969367828016 [label=VectorAccess] - n139969367827456 [label="+"] - n139969367828016 -> n139969367827456 - n139969367830032 [label=VectorAccess] - n139969367826896 [label=PropertyAccess] - n139969367830032 -> n139969367826896 - n139969367829248 [label=VectorAccess] - n139969367827456 [label="+"] - n139969367829248 -> n139969367827456 - n139969367343904 [label=VectorAccess] - n139969367826896 [label=PropertyAccess] - n139969367343904 -> n139969367826896 - n139969367830480 [label=VectorAccess] - n139969367827456 [label="+"] - n139969367830480 -> n139969367827456 - n139969367343960 [label=PropertyAccess] - n139969368120512 [label=position] - n139969367343960 -> n139969368120512 - n139969367648800 [label="Iter(0)"] - n139969367343960 -> n139969367648800 - n139969367345304 [label="*"] - n139969367343960 -> n139969367345304 - n139969367346704 [label="+"] - n139969367343960 -> n139969367346704 - n139969367368480 [label="+"] - n139969367343960 -> n139969367368480 - n139969367345304 [label="*"] - n139969367648800 [label="Iter(0)"] - n139969367345304 -> n139969367648800 - n139969367345360 [label=3] - n139969367345304 -> n139969367345360 - n139969367345360 [label=3] - n139969367346704 [label="+"] - n139969367346536 [label="*"] - n139969367346704 -> n139969367346536 - n139969367346760 [label=1] - n139969367346704 -> n139969367346760 - n139969367346536 [label="*"] - n139969367648800 [label="Iter(0)"] - n139969367346536 -> n139969367648800 - n139969367346592 [label=3] - n139969367346536 -> n139969367346592 - n139969367346592 [label=3] - n139969367346760 [label=1] - n139969367368480 [label="+"] - n139969367368312 [label="*"] - n139969367368480 -> n139969367368312 - n139969367368536 [label=2] - n139969367368480 -> n139969367368536 - n139969367368312 [label="*"] - n139969367648800 [label="Iter(0)"] - n139969367368312 -> n139969367648800 - n139969367368368 [label=3] - n139969367368312 -> n139969367368368 - n139969367368368 [label=3] - n139969367368536 [label=2] - n139969367344072 [label=PropertyAccess] - n139969368120568 [label=velocity] - n139969367344072 -> n139969368120568 - n139969367648800 [label="Iter(0)"] - n139969367344072 -> n139969367648800 - n139969367344968 [label="*"] - n139969367344072 -> n139969367344968 - n139969367346368 [label="+"] - n139969367344072 -> n139969367346368 - n139969367368144 [label="+"] - n139969367344072 -> n139969367368144 - n139969367344968 [label="*"] - n139969367648800 [label="Iter(0)"] - n139969367344968 -> n139969367648800 - n139969367345024 [label=3] - n139969367344968 -> n139969367345024 - n139969367345024 [label=3] - n139969367346368 [label="+"] - n139969367346200 [label="*"] - n139969367346368 -> n139969367346200 - n139969367346424 [label=1] - n139969367346368 -> n139969367346424 - n139969367346200 [label="*"] - n139969367648800 [label="Iter(0)"] - n139969367346200 -> n139969367648800 - n139969367346256 [label=3] - n139969367346200 -> n139969367346256 - n139969367346256 [label=3] - n139969367346424 [label=1] - n139969367368144 [label="+"] - n139969367367976 [label="*"] - n139969367368144 -> n139969367367976 - n139969367368200 [label=2] - n139969367368144 -> n139969367368200 - n139969367367976 [label="*"] - n139969367648800 [label="Iter(0)"] - n139969367367976 -> n139969367648800 - n139969367368032 [label=3] - n139969367367976 -> n139969367368032 - n139969367368032 [label=3] - n139969367368200 [label=2] - n139969367344184 [label="*"] - n139969367344240 [label=0.005] - n139969367344184 -> n139969367344240 - n139969367344072 [label=PropertyAccess] - n139969367344184 -> n139969367344072 - n139969367344240 [label=0.005] - n139969367344352 [label="+"] - n139969367343960 [label=PropertyAccess] - n139969367344352 -> n139969367343960 - n139969367344184 [label="*"] - n139969367344352 -> n139969367344184 - n139969367344576 [label="*"] - n139969367648800 [label="Iter(0)"] - n139969367344576 -> n139969367648800 - n139969367344632 [label=3] - n139969367344576 -> n139969367344632 - n139969367344632 [label=3] - n139969367345808 [label="*"] - n139969367648800 [label="Iter(0)"] - n139969367345808 -> n139969367648800 - n139969367345864 [label=3] - n139969367345808 -> n139969367345864 - n139969367345864 [label=3] - n139969367345976 [label="+"] - n139969367345808 [label="*"] - n139969367345976 -> n139969367345808 - n139969367346032 [label=1] - n139969367345976 -> n139969367346032 - n139969367346032 [label=1] - n139969367347040 [label="*"] - n139969367648800 [label="Iter(0)"] - n139969367347040 -> n139969367648800 - n139969367347096 [label=3] - n139969367347040 -> n139969367347096 - n139969367347096 [label=3] - n139969367367752 [label="+"] - n139969367347040 [label="*"] - n139969367367752 -> n139969367347040 - n139969367367808 [label=2] - n139969367367752 -> n139969367367808 - n139969367367808 [label=2] - n139969367344464 [label=Assign] - n139969367345696 [label=VectorAccess] - n139969367344464 -> n139969367345696 - n139969367344912 [label=VectorAccess] - n139969367344464 -> n139969367344912 - n139969367346928 [label=VectorAccess] - n139969367344464 -> n139969367346928 - n139969367346144 [label=VectorAccess] - n139969367344464 -> n139969367346144 - n139969367368704 [label=VectorAccess] - n139969367344464 -> n139969367368704 - n139969367367920 [label=VectorAccess] - n139969367344464 -> n139969367367920 - n139969367345696 [label=VectorAccess] - n139969367343960 [label=PropertyAccess] - n139969367345696 -> n139969367343960 - n139969367344912 [label=VectorAccess] - n139969367344352 [label="+"] - n139969367344912 -> n139969367344352 - n139969367346928 [label=VectorAccess] - n139969367343960 [label=PropertyAccess] - n139969367346928 -> n139969367343960 - n139969367346144 [label=VectorAccess] - n139969367344352 [label="+"] - n139969367346144 -> n139969367344352 - n139969367368704 [label=VectorAccess] - n139969367343960 [label=PropertyAccess] - n139969367368704 -> n139969367343960 - n139969367367920 [label=VectorAccess] - n139969367344352 [label="+"] - n139969367367920 -> n139969367344352 + n140343105889616 [label=Block] + n140343105956160 [label=Module] + n140343105889616 -> n140343105956160 + n140343105956216 [label=Module] + n140343105889616 -> n140343105956216 + n140343105956160 [label=Module] + n140343105956104 [label=Block] + n140343105956160 -> n140343105956104 + n140343105956104 [label=Block] + n140343105954200 [label=ParticleFor] + n140343105956104 -> n140343105954200 + n140343105954200 [label=ParticleFor] + n140343105184936 [label=Block] + n140343105954200 -> n140343105184936 + n140343108419712 [label=nlocal] + n140343105954200 -> n140343108419712 + n140343105184936 [label=Block] + n140343105185104 [label=For] + n140343105184936 -> n140343105185104 + n140343105185384 [label="*"] + n140343105184768 [label="Iter(14)"] + n140343105185384 -> n140343105184768 + n140343105891352 [label=neighborlist_capacity] + n140343105185384 -> n140343105891352 + n140343105184768 [label="Iter(14)"] + n140343105891352 [label=neighborlist_capacity] + n140343105185608 [label=PropertyAccess] + n140343105889840 [label=position] + n140343105185608 -> n140343105889840 + n140343105184768 [label="Iter(14)"] + n140343105185608 -> n140343105184768 + n140343105186784 [label="*"] + n140343105185608 -> n140343105186784 + n140343105225560 [label="+"] + n140343105185608 -> n140343105225560 + n140343105227352 [label="+"] + n140343105185608 -> n140343105227352 + n140343105889840 [label=position] + n140343105186784 [label="*"] + n140343105184768 [label="Iter(14)"] + n140343105186784 -> n140343105184768 + n140343105186840 [label=3] + n140343105186784 -> n140343105186840 + n140343105186840 [label=3] + n140343105225560 [label="+"] + n140343105225392 [label="*"] + n140343105225560 -> n140343105225392 + n140343105225616 [label=1] + n140343105225560 -> n140343105225616 + n140343105225392 [label="*"] + n140343105184768 [label="Iter(14)"] + n140343105225392 -> n140343105184768 + n140343105225448 [label=3] + n140343105225392 -> n140343105225448 + n140343105225448 [label=3] + n140343105225616 [label=1] + n140343105227352 [label="+"] + n140343105227184 [label="*"] + n140343105227352 -> n140343105227184 + n140343105227408 [label=2] + n140343105227352 -> n140343105227408 + n140343105227184 [label="*"] + n140343105184768 [label="Iter(14)"] + n140343105227184 -> n140343105184768 + n140343105227240 [label=3] + n140343105227184 -> n140343105227240 + n140343105227240 [label=3] + n140343105227408 [label=2] + n140343105186000 [label="*"] + n140343105184768 [label="Iter(14)"] + n140343105186000 -> n140343105184768 + n140343105186056 [label=3] + n140343105186000 -> n140343105186056 + n140343105186056 [label=3] + n140343105187680 [label="*"] + n140343105184768 [label="Iter(14)"] + n140343105187680 -> n140343105184768 + n140343105187736 [label=3] + n140343105187680 -> n140343105187736 + n140343105187736 [label=3] + n140343105224776 [label="+"] + n140343105187680 [label="*"] + n140343105224776 -> n140343105187680 + n140343105224832 [label=1] + n140343105224776 -> n140343105224832 + n140343105224832 [label=1] + n140343105226400 [label="*"] + n140343105184768 [label="Iter(14)"] + n140343105226400 -> n140343105184768 + n140343105226456 [label=3] + n140343105226400 -> n140343105226456 + n140343105226456 [label=3] + n140343105226568 [label="+"] + n140343105226400 [label="*"] + n140343105226568 -> n140343105226400 + n140343105226624 [label=2] + n140343105226568 -> n140343105226624 + n140343105226624 [label=2] + n140343106084936 [label="*"] + n140343105184768 [label="Iter(14)"] + n140343106084936 -> n140343105184768 + n140343106084992 [label=3] + n140343106084936 -> n140343106084992 + n140343106084992 [label=3] + n140343106085328 [label="*"] + n140343105184768 [label="Iter(14)"] + n140343106085328 -> n140343105184768 + n140343106085384 [label=3] + n140343106085328 -> n140343106085384 + n140343106085384 [label=3] + n140343106085832 [label="*"] + n140343105184768 [label="Iter(14)"] + n140343106085832 -> n140343105184768 + n140343106085888 [label=3] + n140343106085832 -> n140343106085888 + n140343106085888 [label=3] + n140343106086000 [label="+"] + n140343106085832 [label="*"] + n140343106086000 -> n140343106085832 + n140343106086056 [label=1] + n140343106086000 -> n140343106086056 + n140343106086056 [label=1] + n140343106086224 [label="*"] + n140343105184768 [label="Iter(14)"] + n140343106086224 -> n140343105184768 + n140343106086280 [label=3] + n140343106086224 -> n140343106086280 + n140343106086280 [label=3] + n140343106086392 [label="+"] + n140343106086224 [label="*"] + n140343106086392 -> n140343106086224 + n140343106086448 [label=1] + n140343106086392 -> n140343106086448 + n140343106086448 [label=1] + n140343106086728 [label="*"] + n140343105184768 [label="Iter(14)"] + n140343106086728 -> n140343105184768 + n140343106086784 [label=3] + n140343106086728 -> n140343106086784 + n140343106086784 [label=3] + n140343106086896 [label="+"] + n140343106086728 [label="*"] + n140343106086896 -> n140343106086728 + n140343106086952 [label=2] + n140343106086896 -> n140343106086952 + n140343106086952 [label=2] + n140343106087120 [label="*"] + n140343105184768 [label="Iter(14)"] + n140343106087120 -> n140343105184768 + n140343106087176 [label=3] + n140343106087120 -> n140343106087176 + n140343106087176 [label=3] + n140343106087288 [label="+"] + n140343106087120 [label="*"] + n140343106087288 -> n140343106087120 + n140343106087344 [label=2] + n140343106087288 -> n140343106087344 + n140343106087344 [label=2] + n140343105185104 [label=For] + n140343105185160 [label="Iter(15)"] + n140343105185104 -> n140343105185160 + n140343105185272 [label=Block] + n140343105185104 -> n140343105185272 + n140343105185216 [label=0] + n140343105185104 -> n140343105185216 + n140343105185048 [label=ArrayAccess] + n140343105185104 -> n140343105185048 + n140343105185160 [label="Iter(15)"] + n140343105185272 [label=Block] + n140343105228304 [label=Filter] + n140343105185272 -> n140343105228304 + n140343105185496 [label="+"] + n140343105185384 [label="*"] + n140343105185496 -> n140343105185384 + n140343105185160 [label="Iter(15)"] + n140343105185496 -> n140343105185160 + n140343105185720 [label=PropertyAccess] + n140343105889840 [label=position] + n140343105185720 -> n140343105889840 + n140343105185328 [label=ArrayAccess] + n140343105185720 -> n140343105185328 + n140343105187120 [label="*"] + n140343105185720 -> n140343105187120 + n140343105225896 [label="+"] + n140343105185720 -> n140343105225896 + n140343105227688 [label="+"] + n140343105185720 -> n140343105227688 + n140343105185328 [label=ArrayAccess] + n140343105891408 [label=neighborlists] + n140343105185328 -> n140343105891408 + n140343105185496 [label="+"] + n140343105185328 -> n140343105185496 + n140343105891408 [label=neighborlists] + n140343105187120 [label="*"] + n140343105185328 [label=ArrayAccess] + n140343105187120 -> n140343105185328 + n140343105187176 [label=3] + n140343105187120 -> n140343105187176 + n140343105187176 [label=3] + n140343105225896 [label="+"] + n140343105225728 [label="*"] + n140343105225896 -> n140343105225728 + n140343105225952 [label=1] + n140343105225896 -> n140343105225952 + n140343105225728 [label="*"] + n140343105185328 [label=ArrayAccess] + n140343105225728 -> n140343105185328 + n140343105225784 [label=3] + n140343105225728 -> n140343105225784 + n140343105225784 [label=3] + n140343105225952 [label=1] + n140343105227688 [label="+"] + n140343105227520 [label="*"] + n140343105227688 -> n140343105227520 + n140343105227744 [label=2] + n140343105227688 -> n140343105227744 + n140343105227520 [label="*"] + n140343105185328 [label=ArrayAccess] + n140343105227520 -> n140343105185328 + n140343105227576 [label=3] + n140343105227520 -> n140343105227576 + n140343105227576 [label=3] + n140343105227744 [label=2] + n140343105185832 [label="-"] + n140343105185608 [label=PropertyAccess] + n140343105185832 -> n140343105185608 + n140343105185720 [label=PropertyAccess] + n140343105185832 -> n140343105185720 + n140343105186336 [label="*"] + n140343105185328 [label=ArrayAccess] + n140343105186336 -> n140343105185328 + n140343105186392 [label=3] + n140343105186336 -> n140343105186392 + n140343105186392 [label=3] + n140343105187512 [label="*"] + n140343105186672 [label=VectorAccess] + n140343105187512 -> n140343105186672 + n140343105187456 [label=VectorAccess] + n140343105187512 -> n140343105187456 + n140343105186672 [label=VectorAccess] + n140343105185832 [label="-"] + n140343105186672 -> n140343105185832 + n140343105187456 [label=VectorAccess] + n140343105185832 [label="-"] + n140343105187456 -> n140343105185832 + n140343105224944 [label="*"] + n140343105185328 [label=ArrayAccess] + n140343105224944 -> n140343105185328 + n140343105225000 [label=3] + n140343105224944 -> n140343105225000 + n140343105225000 [label=3] + n140343105225112 [label="+"] + n140343105224944 [label="*"] + n140343105225112 -> n140343105224944 + n140343105225168 [label=1] + n140343105225112 -> n140343105225168 + n140343105225168 [label=1] + n140343105226120 [label="*"] + n140343105225280 [label=VectorAccess] + n140343105226120 -> n140343105225280 + n140343105226064 [label=VectorAccess] + n140343105226120 -> n140343105226064 + n140343105225280 [label=VectorAccess] + n140343105185832 [label="-"] + n140343105225280 -> n140343105185832 + n140343105226064 [label=VectorAccess] + n140343105185832 [label="-"] + n140343105226064 -> n140343105185832 + n140343105226232 [label="+"] + n140343105187512 [label="*"] + n140343105226232 -> n140343105187512 + n140343105226120 [label="*"] + n140343105226232 -> n140343105226120 + n140343105226736 [label="*"] + n140343105185328 [label=ArrayAccess] + n140343105226736 -> n140343105185328 + n140343105226792 [label=3] + n140343105226736 -> n140343105226792 + n140343105226792 [label=3] + n140343105226904 [label="+"] + n140343105226736 [label="*"] + n140343105226904 -> n140343105226736 + n140343105226960 [label=2] + n140343105226904 -> n140343105226960 + n140343105226960 [label=2] + n140343105227912 [label="*"] + n140343105227072 [label=VectorAccess] + n140343105227912 -> n140343105227072 + n140343105227856 [label=VectorAccess] + n140343105227912 -> n140343105227856 + n140343105227072 [label=VectorAccess] + n140343105185832 [label="-"] + n140343105227072 -> n140343105185832 + n140343105227856 [label=VectorAccess] + n140343105185832 [label="-"] + n140343105227856 -> n140343105185832 + n140343105228024 [label="+"] + n140343105226232 [label="+"] + n140343105228024 -> n140343105226232 + n140343105227912 [label="*"] + n140343105228024 -> n140343105227912 + n140343105228136 [label="<"] + n140343105228024 [label="+"] + n140343105228136 -> n140343105228024 + n140343105228192 [label=2.5] + n140343105228136 -> n140343105228192 + n140343105228192 [label=2.5] + n140343105228304 [label=Filter] + n140343105228136 [label="<"] + n140343105228304 -> n140343105228136 + n140343105956048 [label=Block] + n140343105228304 -> n140343105956048 + n140343105956048 [label=Block] + n140343105891968 [label=Assign] + n140343105956048 -> n140343105891968 + n140343105956384 [label="/"] + n140343105956440 [label=1.0] + n140343105956384 -> n140343105956440 + n140343105228024 [label="+"] + n140343105956384 -> n140343105228024 + n140343105956440 [label=1.0] + n140343105956552 [label="*"] + n140343105956384 [label="/"] + n140343105956552 -> n140343105956384 + n140343105956384 [label="/"] + n140343105956552 -> n140343105956384 + n140343105956664 [label="*"] + n140343105956552 [label="*"] + n140343105956664 -> n140343105956552 + n140343105956384 [label="/"] + n140343105956664 -> n140343105956384 + n140343105956328 [label=PropertyAccess] + n140343105889952 [label=force] + n140343105956328 -> n140343105889952 + n140343105184768 [label="Iter(14)"] + n140343105956328 -> n140343105184768 + n140343106085328 [label="*"] + n140343105956328 -> n140343106085328 + n140343106086392 [label="+"] + n140343105956328 -> n140343106086392 + n140343106087288 [label="+"] + n140343105956328 -> n140343106087288 + n140343105889952 [label=force] + n140343105957000 [label="*"] + n140343105185832 [label="-"] + n140343105957000 -> n140343105185832 + n140343105957056 [label=48.0] + n140343105957000 -> n140343105957056 + n140343105957056 [label=48.0] + n140343105957336 [label="*"] + n140343105185832 [label="-"] + n140343105957336 -> n140343105185832 + n140343105601432 [label="*"] + n140343105957336 -> n140343105601432 + n140343105601432 [label="*"] + n140343105957056 [label=48.0] + n140343105601432 -> n140343105957056 + n140343105956664 [label="*"] + n140343105601432 -> n140343105956664 + n140343105957448 [label="-"] + n140343105956664 [label="*"] + n140343105957448 -> n140343105956664 + n140343105957504 [label=0.5] + n140343105957448 -> n140343105957504 + n140343105957504 [label=0.5] + n140343105957616 [label="*"] + n140343105185832 [label="-"] + n140343105957616 -> n140343105185832 + n140343105597904 [label="*"] + n140343105957616 -> n140343105597904 + n140343105597904 [label="*"] + n140343105601432 [label="*"] + n140343105597904 -> n140343105601432 + n140343105957448 [label="-"] + n140343105597904 -> n140343105957448 + n140343105892024 [label="*"] + n140343105185832 [label="-"] + n140343105892024 -> n140343105185832 + n140343105597624 [label="*"] + n140343105892024 -> n140343105597624 + n140343105597624 [label="*"] + n140343105597904 [label="*"] + n140343105597624 -> n140343105597904 + n140343105956384 [label="/"] + n140343105597624 -> n140343105956384 + n140343105892304 [label="+"] + n140343105956328 [label=PropertyAccess] + n140343105892304 -> n140343105956328 + n140343105892024 [label="*"] + n140343105892304 -> n140343105892024 + n140343105891968 [label=Assign] + n140343106085720 [label=VectorAccess] + n140343105891968 -> n140343106085720 + n140343106085272 [label=VectorAccess] + n140343105891968 -> n140343106085272 + n140343106086616 [label=VectorAccess] + n140343105891968 -> n140343106086616 + n140343106086168 [label=VectorAccess] + n140343105891968 -> n140343106086168 + n140343106087512 [label=VectorAccess] + n140343105891968 -> n140343106087512 + n140343106087064 [label=VectorAccess] + n140343105891968 -> n140343106087064 + n140343106085720 [label=VectorAccess] + n140343105956328 [label=PropertyAccess] + n140343106085720 -> n140343105956328 + n140343106085272 [label=VectorAccess] + n140343105892304 [label="+"] + n140343106085272 -> n140343105892304 + n140343106086616 [label=VectorAccess] + n140343105956328 [label=PropertyAccess] + n140343106086616 -> n140343105956328 + n140343106086168 [label=VectorAccess] + n140343105892304 [label="+"] + n140343106086168 -> n140343105892304 + n140343106087512 [label=VectorAccess] + n140343105956328 [label=PropertyAccess] + n140343106087512 -> n140343105956328 + n140343106087064 [label=VectorAccess] + n140343105892304 [label="+"] + n140343106087064 -> n140343105892304 + n140343105185216 [label=0] + n140343105185048 [label=ArrayAccess] + n140343105891464 [label=numneighs] + n140343105185048 -> n140343105891464 + n140343105184768 [label="Iter(14)"] + n140343105185048 -> n140343105184768 + n140343105891464 [label=numneighs] + n140343108419712 [label=nlocal] + n140343105956216 [label=Module] + n140343105954368 [label=Block] + n140343105956216 -> n140343105954368 + n140343105954368 [label=Block] + n140343105955768 [label=ParticleFor] + n140343105954368 -> n140343105955768 + n140343105955768 [label=ParticleFor] + n140343105957280 [label=Block] + n140343105955768 -> n140343105957280 + n140343108419712 [label=nlocal] + n140343105955768 -> n140343108419712 + n140343105957280 [label=Block] + n140343106088352 [label=Assign] + n140343105957280 -> n140343106088352 + n140343105601152 [label=Assign] + n140343105957280 -> n140343105601152 + n140343106087624 [label=PropertyAccess] + n140343105889896 [label=velocity] + n140343106087624 -> n140343105889896 + n140343105954872 [label="Iter(0)"] + n140343106087624 -> n140343105954872 + n140343106088856 [label="*"] + n140343106087624 -> n140343106088856 + n140343105599136 [label="+"] + n140343106087624 -> n140343105599136 + n140343105600368 [label="+"] + n140343106087624 -> n140343105600368 + n140343105889896 [label=velocity] + n140343105954872 [label="Iter(0)"] + n140343106088856 [label="*"] + n140343105954872 [label="Iter(0)"] + n140343106088856 -> n140343105954872 + n140343105597792 [label=3] + n140343106088856 -> n140343105597792 + n140343105597792 [label=3] + n140343105599136 [label="+"] + n140343105598632 [label="*"] + n140343105599136 -> n140343105598632 + n140343105599192 [label=1] + n140343105599136 -> n140343105599192 + n140343105598632 [label="*"] + n140343105954872 [label="Iter(0)"] + n140343105598632 -> n140343105954872 + n140343105599024 [label=3] + n140343105598632 -> n140343105599024 + n140343105599024 [label=3] + n140343105599192 [label=1] + n140343105600368 [label="+"] + n140343105599864 [label="*"] + n140343105600368 -> n140343105599864 + n140343105600424 [label=2] + n140343105600368 -> n140343105600424 + n140343105599864 [label="*"] + n140343105954872 [label="Iter(0)"] + n140343105599864 -> n140343105954872 + n140343105600256 [label=3] + n140343105599864 -> n140343105600256 + n140343105600256 [label=3] + n140343105600424 [label=2] + n140343106087736 [label=PropertyAccess] + n140343105889952 [label=force] + n140343106087736 -> n140343105889952 + n140343105954872 [label="Iter(0)"] + n140343106087736 -> n140343105954872 + n140343106088912 [label="*"] + n140343106087736 -> n140343106088912 + n140343105598856 [label="+"] + n140343106087736 -> n140343105598856 + n140343105600088 [label="+"] + n140343106087736 -> n140343105600088 + n140343106088912 [label="*"] + n140343105954872 [label="Iter(0)"] + n140343106088912 -> n140343105954872 + n140343105597512 [label=3] + n140343106088912 -> n140343105597512 + n140343105597512 [label=3] + n140343105598856 [label="+"] + n140343105598688 [label="*"] + n140343105598856 -> n140343105598688 + n140343105598912 [label=1] + n140343105598856 -> n140343105598912 + n140343105598688 [label="*"] + n140343105954872 [label="Iter(0)"] + n140343105598688 -> n140343105954872 + n140343105598744 [label=3] + n140343105598688 -> n140343105598744 + n140343105598744 [label=3] + n140343105598912 [label=1] + n140343105600088 [label="+"] + n140343105599920 [label="*"] + n140343105600088 -> n140343105599920 + n140343105600144 [label=2] + n140343105600088 -> n140343105600144 + n140343105599920 [label="*"] + n140343105954872 [label="Iter(0)"] + n140343105599920 -> n140343105954872 + n140343105599976 [label=3] + n140343105599920 -> n140343105599976 + n140343105599976 [label=3] + n140343105600144 [label=2] + n140343106087848 [label="*"] + n140343106087904 [label=0.005] + n140343106087848 -> n140343106087904 + n140343106087736 [label=PropertyAccess] + n140343106087848 -> n140343106087736 + n140343106087904 [label=0.005] + n140343106088016 [label=PropertyAccess] + n140343105889784 [label=mass] + n140343106088016 -> n140343105889784 + n140343105954872 [label="Iter(0)"] + n140343106088016 -> n140343105954872 + n140343105889784 [label=mass] + n140343106088128 [label="/"] + n140343106087848 [label="*"] + n140343106088128 -> n140343106087848 + n140343106088016 [label=PropertyAccess] + n140343106088128 -> n140343106088016 + n140343106088240 [label="+"] + n140343106087624 [label=PropertyAccess] + n140343106088240 -> n140343106087624 + n140343106088128 [label="/"] + n140343106088240 -> n140343106088128 + n140343106088464 [label="*"] + n140343105954872 [label="Iter(0)"] + n140343106088464 -> n140343105954872 + n140343106088520 [label=3] + n140343106088464 -> n140343106088520 + n140343106088520 [label=3] + n140343105598240 [label="*"] + n140343105954872 [label="Iter(0)"] + n140343105598240 -> n140343105954872 + n140343105598296 [label=3] + n140343105598240 -> n140343105598296 + n140343105598296 [label=3] + n140343105598408 [label="+"] + n140343105598240 [label="*"] + n140343105598408 -> n140343105598240 + n140343105598464 [label=1] + n140343105598408 -> n140343105598464 + n140343105598464 [label=1] + n140343105599472 [label="*"] + n140343105954872 [label="Iter(0)"] + n140343105599472 -> n140343105954872 + n140343105599528 [label=3] + n140343105599472 -> n140343105599528 + n140343105599528 [label=3] + n140343105599640 [label="+"] + n140343105599472 [label="*"] + n140343105599640 -> n140343105599472 + n140343105599696 [label=2] + n140343105599640 -> n140343105599696 + n140343105599696 [label=2] + n140343106088352 [label=Assign] + n140343105598128 [label=VectorAccess] + n140343106088352 -> n140343105598128 + n140343106088800 [label=VectorAccess] + n140343106088352 -> n140343106088800 + n140343105599360 [label=VectorAccess] + n140343106088352 -> n140343105599360 + n140343105598576 [label=VectorAccess] + n140343106088352 -> n140343105598576 + n140343105600592 [label=VectorAccess] + n140343106088352 -> n140343105600592 + n140343105599808 [label=VectorAccess] + n140343106088352 -> n140343105599808 + n140343105598128 [label=VectorAccess] + n140343106087624 [label=PropertyAccess] + n140343105598128 -> n140343106087624 + n140343106088800 [label=VectorAccess] + n140343106088240 [label="+"] + n140343106088800 -> n140343106088240 + n140343105599360 [label=VectorAccess] + n140343106087624 [label=PropertyAccess] + n140343105599360 -> n140343106087624 + n140343105598576 [label=VectorAccess] + n140343106088240 [label="+"] + n140343105598576 -> n140343106088240 + n140343105600592 [label=VectorAccess] + n140343106087624 [label=PropertyAccess] + n140343105600592 -> n140343106087624 + n140343105599808 [label=VectorAccess] + n140343106088240 [label="+"] + n140343105599808 -> n140343106088240 + n140343105600648 [label=PropertyAccess] + n140343105889840 [label=position] + n140343105600648 -> n140343105889840 + n140343105954872 [label="Iter(0)"] + n140343105600648 -> n140343105954872 + n140343105630728 [label="*"] + n140343105600648 -> n140343105630728 + n140343105632128 [label="+"] + n140343105600648 -> n140343105632128 + n140343105633360 [label="+"] + n140343105600648 -> n140343105633360 + n140343105630728 [label="*"] + n140343105954872 [label="Iter(0)"] + n140343105630728 -> n140343105954872 + n140343105630784 [label=3] + n140343105630728 -> n140343105630784 + n140343105630784 [label=3] + n140343105632128 [label="+"] + n140343105631960 [label="*"] + n140343105632128 -> n140343105631960 + n140343105632184 [label=1] + n140343105632128 -> n140343105632184 + n140343105631960 [label="*"] + n140343105954872 [label="Iter(0)"] + n140343105631960 -> n140343105954872 + n140343105632016 [label=3] + n140343105631960 -> n140343105632016 + n140343105632016 [label=3] + n140343105632184 [label=1] + n140343105633360 [label="+"] + n140343105633192 [label="*"] + n140343105633360 -> n140343105633192 + n140343105633416 [label=2] + n140343105633360 -> n140343105633416 + n140343105633192 [label="*"] + n140343105954872 [label="Iter(0)"] + n140343105633192 -> n140343105954872 + n140343105633248 [label=3] + n140343105633192 -> n140343105633248 + n140343105633248 [label=3] + n140343105633416 [label=2] + n140343105600760 [label=PropertyAccess] + n140343105889896 [label=velocity] + n140343105600760 -> n140343105889896 + n140343105954872 [label="Iter(0)"] + n140343105600760 -> n140343105954872 + n140343105630392 [label="*"] + n140343105600760 -> n140343105630392 + n140343105631792 [label="+"] + n140343105600760 -> n140343105631792 + n140343105633024 [label="+"] + n140343105600760 -> n140343105633024 + n140343105630392 [label="*"] + n140343105954872 [label="Iter(0)"] + n140343105630392 -> n140343105954872 + n140343105630448 [label=3] + n140343105630392 -> n140343105630448 + n140343105630448 [label=3] + n140343105631792 [label="+"] + n140343105631624 [label="*"] + n140343105631792 -> n140343105631624 + n140343105631848 [label=1] + n140343105631792 -> n140343105631848 + n140343105631624 [label="*"] + n140343105954872 [label="Iter(0)"] + n140343105631624 -> n140343105954872 + n140343105631680 [label=3] + n140343105631624 -> n140343105631680 + n140343105631680 [label=3] + n140343105631848 [label=1] + n140343105633024 [label="+"] + n140343105632856 [label="*"] + n140343105633024 -> n140343105632856 + n140343105633080 [label=2] + n140343105633024 -> n140343105633080 + n140343105632856 [label="*"] + n140343105954872 [label="Iter(0)"] + n140343105632856 -> n140343105954872 + n140343105632912 [label=3] + n140343105632856 -> n140343105632912 + n140343105632912 [label=3] + n140343105633080 [label=2] + n140343105600872 [label="*"] + n140343105600928 [label=0.005] + n140343105600872 -> n140343105600928 + n140343105600760 [label=PropertyAccess] + n140343105600872 -> n140343105600760 + n140343105600928 [label=0.005] + n140343105601040 [label="+"] + n140343105600648 [label=PropertyAccess] + n140343105601040 -> n140343105600648 + n140343105600872 [label="*"] + n140343105601040 -> n140343105600872 + n140343105601264 [label="*"] + n140343105954872 [label="Iter(0)"] + n140343105601264 -> n140343105954872 + n140343105601320 [label=3] + n140343105601264 -> n140343105601320 + n140343105601320 [label=3] + n140343105631232 [label="*"] + n140343105954872 [label="Iter(0)"] + n140343105631232 -> n140343105954872 + n140343105631288 [label=3] + n140343105631232 -> n140343105631288 + n140343105631288 [label=3] + n140343105631400 [label="+"] + n140343105631232 [label="*"] + n140343105631400 -> n140343105631232 + n140343105631456 [label=1] + n140343105631400 -> n140343105631456 + n140343105631456 [label=1] + n140343105632464 [label="*"] + n140343105954872 [label="Iter(0)"] + n140343105632464 -> n140343105954872 + n140343105632520 [label=3] + n140343105632464 -> n140343105632520 + n140343105632520 [label=3] + n140343105632632 [label="+"] + n140343105632464 [label="*"] + n140343105632632 -> n140343105632464 + n140343105632688 [label=2] + n140343105632632 -> n140343105632688 + n140343105632688 [label=2] + n140343105601152 [label=Assign] + n140343105631120 [label=VectorAccess] + n140343105601152 -> n140343105631120 + n140343105630336 [label=VectorAccess] + n140343105601152 -> n140343105630336 + n140343105632352 [label=VectorAccess] + n140343105601152 -> n140343105632352 + n140343105631568 [label=VectorAccess] + n140343105601152 -> n140343105631568 + n140343105633584 [label=VectorAccess] + n140343105601152 -> n140343105633584 + n140343105632800 [label=VectorAccess] + n140343105601152 -> n140343105632800 + n140343105631120 [label=VectorAccess] + n140343105600648 [label=PropertyAccess] + n140343105631120 -> n140343105600648 + n140343105630336 [label=VectorAccess] + n140343105601040 [label="+"] + n140343105630336 -> n140343105601040 + n140343105632352 [label=VectorAccess] + n140343105600648 [label=PropertyAccess] + n140343105632352 -> n140343105600648 + n140343105631568 [label=VectorAccess] + n140343105601040 [label="+"] + n140343105631568 -> n140343105601040 + n140343105633584 [label=VectorAccess] + n140343105600648 [label=PropertyAccess] + n140343105633584 -> n140343105600648 + n140343105632800 [label=VectorAccess] + n140343105601040 [label="+"] + n140343105632800 -> n140343105601040 } diff --git a/examples/kernels.pdf b/examples/kernels.pdf index 56dd14b421cb95edcb4f5acd752c28738c52aa3f..f16bb711858657aee5396a32b5e93be43df0a19d 100644 Binary files a/examples/kernels.pdf and b/examples/kernels.pdf differ diff --git a/examples/lj_func.py b/examples/lj_func.py index 162d88df4b4a658b4d2cd520de41751cb3f4d770..61c8119f8ef5f5f1e92729f7ab4b51ca08e2efa1 100644 --- a/examples/lj_func.py +++ b/examples/lj_func.py @@ -31,5 +31,6 @@ psim.periodic(2.8) psim.vtk_output("output/test") psim.compute(lj, cutoff_radius, {'sigma6': sigma6, 'epsilon': epsilon}) psim.compute(euler, symbols={'dt': dt}) -psim.target(pairs.target_gpu()) +psim.target(pairs.target_cpu()) +#psim.target(pairs.target_gpu()) psim.generate() diff --git a/examples/lj_ns.cpp b/examples/lj_ns.cpp index a0c06bf204d09975018d1d765a3af43a031f8e70..c9cccf4d852b3bd36e27fcae80e8b2672e0027e2 100644 --- a/examples/lj_ns.cpp +++ b/examples/lj_ns.cpp @@ -671,8 +671,8 @@ int main() { int *numneighs = (int *) malloc((sizeof(int) * particle_capacity)); int *pbc_map = (int *) malloc((sizeof(int) * pbc_capacity)); int *pbc_mult = (int *) malloc((sizeof(int) * (pbc_capacity * 3))); - unsigned long long int prop_hflags[1] = {18446744073709551615}; - unsigned long long int prop_dflags[1] = {0}; + unsigned long long int prop_hflags[1] = {18446744073709551615ULL}; + unsigned long long int prop_dflags[1] = {0ULL}; double *mass = (double *) malloc((sizeof(double) * (particle_capacity + pbc_capacity))); ps->addProperty(Property(0, "mass", mass, Prop_Float)); double *position = (double *) malloc((sizeof(double) * ((particle_capacity + pbc_capacity) * 3))); @@ -871,28 +871,28 @@ int main() { prop_hflags[0] = e531; module_0(neighborlist_capacity, nlocal, neighborlists, numneighs, position, force); const unsigned long long int a131 = prop_dflags[0]; - const unsigned long long int e532 = a131 & 1; + const unsigned long long int e532 = a131 & 8; const bool e533 = e532 == 0; if(e533) { - pairs::copy_to_device(mass) + pairs::copy_to_device(force) } const unsigned long long int a132 = prop_dflags[0]; - const unsigned long long int e534 = a132 & 8; + const unsigned long long int e534 = a132 & 2; const bool e535 = e534 == 0; if(e535) { - pairs::copy_to_device(force) + pairs::copy_to_device(position) } const unsigned long long int a133 = prop_dflags[0]; - const unsigned long long int e536 = a133 & 2; + const unsigned long long int e536 = a133 & 4; const bool e537 = e536 == 0; if(e537) { - pairs::copy_to_device(position) + pairs::copy_to_device(velocity) } const unsigned long long int a134 = prop_dflags[0]; - const unsigned long long int e538 = a134 & 4; + const unsigned long long int e538 = a134 & 1; const bool e539 = e538 == 0; if(e539) { - pairs::copy_to_device(velocity) + pairs::copy_to_device(mass) } const unsigned long long int a136 = prop_dflags[0]; const unsigned long long int e540 = a136 | 15; diff --git a/setup.py b/setup.py index 09e85066997bff1c93ece7e7feecfb52d5157f6c..018a268c3f1ab1b90cdb9307b50065eca7db9532 100644 --- a/setup.py +++ b/setup.py @@ -7,6 +7,7 @@ def readme(): modules = [ + 'analysis', 'code_gen', 'coupling', 'graph', diff --git a/src/pairs/analysis/__init__.py b/src/pairs/analysis/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..5cd89c2932f7653d7c7813e5ebdaf405daa009f3 --- /dev/null +++ b/src/pairs/analysis/__init__.py @@ -0,0 +1,28 @@ +from pairs.analysis.bin_ops import SetBinOpTerminals, SetUsedBinOps +from pairs.analysis.blocks import SetBlockVariants, SetParentBlock +from pairs.analysis.modules import FetchModulesReferences + + +class Analysis: + def __init__(self, ast): + self._ast = ast + self._set_used_bin_ops = SetUsedBinOps(ast) + self._set_bin_op_terminals = SetBinOpTerminals(ast) + self._set_block_variants = SetBlockVariants(ast) + self._set_parent_block = SetParentBlock(ast) + self._fetch_modules_references = FetchModulesReferences(ast) + + def set_used_bin_ops(self): + self._set_used_bin_ops.visit() + + def set_bin_op_terminals(self): + self._set_bin_op_terminals.visit() + + def set_block_variants(self): + self._set_block_variants.mutate() + + def set_parent_block(self): + self._set_parent_block.visit() + + def fetch_modules_references(self): + self._fetch_modules_references.visit() diff --git a/src/pairs/analysis/bin_ops.py b/src/pairs/analysis/bin_ops.py new file mode 100644 index 0000000000000000000000000000000000000000..3750caaccb9e031766e3822e86b1c8f25deefb38 --- /dev/null +++ b/src/pairs/analysis/bin_ops.py @@ -0,0 +1,54 @@ +from pairs.ir.visitor import Visitor + + +class SetBinOpTerminals(Visitor): + def __init__(self, ast): + super().__init__(ast) + self.elems = [] + + def push_terminal(self, ast_node): + for e in self.elems: + e.add_terminal(ast_node.name()) + + def visit_BinOp(self, ast_node): + self.elems.append(ast_node) + self.visit_children(ast_node) + self.elems.pop() + + def visit_PropertyAccess(self, ast_node): + self.elems.append(ast_node) + self.visit_children(ast_node) + self.elems.pop() + + def visit_Array(self, ast_node): + self.push_terminal(ast_node) + + # TODO: Array should be enough + def visit_ArrayND(self, ast_node): + self.push_terminal(ast_node) + + def visit_Iter(self, ast_node): + self.push_terminal(ast_node) + + def visit_Property(self, ast_node): + self.push_terminal(ast_node) + + def visit_Var(self, ast_node): + self.push_terminal(ast_node) + + +class SetUsedBinOps(Visitor): + def __init__(self, ast): + super().__init__(ast) + self.bin_ops = [] + + def visit_BinOp(self, ast_node): + ast_node.decl.used = True + self.visit_children(ast_node) + + def visit_Decl(self, ast_node): + pass + + def visit_PropertyAccess(self, ast_node): + ast_node.decl.used = True + self.visit_children(ast_node) diff --git a/src/pairs/transformations/LICM.py b/src/pairs/analysis/blocks.py similarity index 56% rename from src/pairs/transformations/LICM.py rename to src/pairs/analysis/blocks.py index 264aa37fea89a79fa0716511e45bd1bbb6acd1e5..ec4b7b6b8a70fc407dfc536bf0e179f2d62d41b1 100644 --- a/src/pairs/transformations/LICM.py +++ b/src/pairs/analysis/blocks.py @@ -1,7 +1,5 @@ -from pairs.ir.bin_op import BinOp from pairs.ir.loops import For, While from pairs.ir.mutator import Mutator -from pairs.ir.properties import PropertyAccess from pairs.ir.visitor import Visitor @@ -121,99 +119,3 @@ class SetParentBlock(Visitor): assert isinstance(ast_node, (For, While)), "Node must be a loop!" loop_id = id(ast_node) return self.parents[loop_id] if loop_id in self.parents else None - - -class SetBinOpTerminals(Visitor): - def __init__(self, ast): - super().__init__(ast) - self.elems = [] - - def push_terminal(self, ast_node): - for e in self.elems: - e.add_terminal(ast_node.name()) - - def visit_BinOp(self, ast_node): - self.elems.append(ast_node) - self.visit_children(ast_node) - self.elems.pop() - - def visit_PropertyAccess(self, ast_node): - self.elems.append(ast_node) - self.visit_children(ast_node) - self.elems.pop() - - def visit_Array(self, ast_node): - self.push_terminal(ast_node) - - # TODO: Array should be enough - def visit_ArrayND(self, ast_node): - self.push_terminal(ast_node) - - def visit_Iter(self, ast_node): - self.push_terminal(ast_node) - - def visit_Property(self, ast_node): - self.push_terminal(ast_node) - - def visit_Var(self, ast_node): - self.push_terminal(ast_node) - - -class LICM(Mutator): - def __init__(self, ast): - super().__init__(ast) - self.lifts = {} - self.loops = [] - - def mutate_For(self, ast_node): - self.lifts[id(ast_node)] = [] - self.loops.append(ast_node) - ast_node.iterator = self.mutate(ast_node.iterator) - ast_node.block = self.mutate(ast_node.block) - self.loops.pop() - return ast_node - - def mutate_While(self, ast_node): - self.lifts[id(ast_node)] = [] - self.loops.append(ast_node) - ast_node.cond = self.mutate(ast_node.cond) - ast_node.block = self.mutate(ast_node.block) - self.loops.pop() - return ast_node - - def mutate_Decl(self, ast_node): - if self.loops and isinstance(ast_node.elem, (BinOp, PropertyAccess)): - last_loop = self.loops[-1] - #print(f"variants = {last_loop.block.variants}, terminals = {ast_node.elem.terminals}") - if not last_loop.block.variants.intersection(ast_node.elem.terminals): - #print(f'lifting {ast_node.elem.id()}') - self.lifts[id(last_loop)].append(ast_node) - return None - - return ast_node - - def mutate_Block(self, ast_node): - new_stmts = [] - stmts = [self.mutate(s) for s in ast_node.stmts] - - for s in stmts: - if s is not None: - s_id = id(s) - if isinstance(s, (For, While)) and s_id in self.lifts: - new_stmts = new_stmts + self.lifts[s_id] - - new_stmts.append(s) - - ast_node.stmts = new_stmts - return ast_node - - -def move_loop_invariant_code(ast): - set_parent_block = SetParentBlock(ast) - set_parent_block.visit() - set_block_variants = SetBlockVariants(ast) - set_block_variants.mutate() - set_bin_op_terminals = SetBinOpTerminals(ast) - set_bin_op_terminals.visit() - licm = LICM(ast) - licm.mutate() diff --git a/src/pairs/analysis/modules.py b/src/pairs/analysis/modules.py new file mode 100644 index 0000000000000000000000000000000000000000..4da4846e1100f9f0eb93923d77ea88c86f247f11 --- /dev/null +++ b/src/pairs/analysis/modules.py @@ -0,0 +1,34 @@ +from pairs.ir.visitor import Visitor + + +class FetchModulesReferences(Visitor): + def __init__(self, ast): + super().__init__(ast) + self.module_stack = [] + self.writing = False + + def visit_Assign(self, ast_node): + self.writing = True + for c in ast_node.destinations(): + self.visit(c) + + self.writing = False + for c in ast_node.sources(): + self.visit(c) + + def visit_Module(self, ast_node): + self.module_stack.append(ast_node) + self.visit_children(ast_node) + self.module_stack.pop() + + def visit_Array(self, ast_node): + for m in self.module_stack: + m.add_array(ast_node, self.writing) + + def visit_Property(self, ast_node): + for m in self.module_stack: + m.add_property(ast_node, self.writing) + + def visit_Var(self, ast_node): + for m in self.module_stack: + m.add_variable(ast_node, self.writing) diff --git a/src/pairs/sim/simulation.py b/src/pairs/sim/simulation.py index 5aa9c4ca42bfb9c8936a92bfce2d0c13bd963a67..d5ad6fe8f49b013d99ed58df13e92df34a61b37a 100644 --- a/src/pairs/sim/simulation.py +++ b/src/pairs/sim/simulation.py @@ -20,15 +20,7 @@ from pairs.sim.read_from_file import ReadFromFile from pairs.sim.timestep import Timestep from pairs.sim.variables import VariablesDecl from pairs.sim.vtk import VTKWrite -from pairs.transformations.add_device_copies import AddDeviceCopies -from pairs.transformations.prioritize_scalar_ops import prioritize_scalar_ops -from pairs.transformations.set_used_bin_ops import set_used_bin_ops -from pairs.transformations.simplify import simplify_expressions -from pairs.transformations.LICM import move_loop_invariant_code -from pairs.transformations.lower import lower_everything -from pairs.transformations.merge_adjacent_blocks import merge_adjacent_blocks -from pairs.transformations.modules import modularize -from pairs.transformations.replace_symbols import replace_symbols +from pairs.transformations import Transformations class Simulation: @@ -248,22 +240,10 @@ class Simulation: ]) program = Module(self, name='main', block=Block.merge_blocks(decls, body)) - if self._target.is_gpu(): - add_copies = AddDeviceCopies(program) - - # Transformations - lower_everything(program) - replace_symbols(program) - merge_adjacent_blocks(program) - prioritize_scalar_ops(program) - simplify_expressions(program) - move_loop_invariant_code(program) - set_used_bin_ops(program) - modularize(program) - merge_adjacent_blocks(program) - - if self._target.is_gpu(): - add_copies.mutate() + + # Apply transformations + transformations = Transformations(program, self._target) + transformations.apply_all() # For this part on, all bin ops are generated without usage verification self.check_decl_usage = False diff --git a/src/pairs/transformations/__init__.py b/src/pairs/transformations/__init__.py index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..edd3b334066238a50127bbf24952640701b57711 100644 --- a/src/pairs/transformations/__init__.py +++ b/src/pairs/transformations/__init__.py @@ -0,0 +1,66 @@ +from pairs.analysis import Analysis +from pairs.transformations.blocks import MergeAdjacentBlocks +from pairs.transformations.devices import AddDeviceCopies +from pairs.transformations.expressions import ReplaceSymbols, SimplifyExpressions, PrioritizeScalarOps +from pairs.transformations.loops import LICM +from pairs.transformations.lower import Lower +from pairs.transformations.modules import DereferenceWriteVariables, AddResizeLogic, ReplaceModulesByCalls + + +class Transformations: + def __init__(self, ast, target): + self._ast = ast + self._target = target + self._analysis = Analysis(ast) + self._merge_adjacent_blocks = MergeAdjacentBlocks(ast) + self._replace_symbols = ReplaceSymbols(ast) + self._simplify_expressions = SimplifyExpressions(ast) + self._prioritize_scalar_ops = PrioritizeScalarOps(ast) + self._licm = LICM(ast) + self._dereference_write_variables = DereferenceWriteVariables(ast) + self._add_resize_logic = AddResizeLogic(ast) + self._replace_modules_by_calls = ReplaceModulesByCalls(ast) + + if target.is_gpu(): + self._add_device_copies = AddDeviceCopies(ast) + + def lower_everything(self): + nlowered = 1 + while nlowered > 0: + lower = Lower(self._ast) + lower.mutate() + nlowered = lower.lowered_nodes + + self._merge_adjacent_blocks.mutate() + + def optimize_expressions(self): + self._replace_symbols.mutate() + self._simplify_expressions.mutate() + self._prioritize_scalar_ops.mutate() + self._simplify_expressions.mutate() + self._analysis.set_used_bin_ops() + + def licm(self): + self._analysis.set_parent_block() + self._analysis.set_block_variants() + self._analysis.set_bin_op_terminals() + self._licm.mutate() + + def modularize(self): + self._add_resize_logic.mutate() + self._analysis.fetch_modules_references() + self._dereference_write_variables.mutate() + self._replace_modules_by_calls.set_module_resizes(self._add_resize_logic.module_resizes) + self._replace_modules_by_calls.mutate() + self._merge_adjacent_blocks.mutate() + + def add_device_copies(self): + if self._target.is_gpu(): + self._add_device_copies.mutate() + + def apply_all(self): + self.lower_everything() + self.optimize_expressions() + self.licm() + self.modularize() + self.add_device_copies() diff --git a/src/pairs/transformations/merge_adjacent_blocks.py b/src/pairs/transformations/blocks.py similarity index 85% rename from src/pairs/transformations/merge_adjacent_blocks.py rename to src/pairs/transformations/blocks.py index 10951443a57202ee34bae5e02fade8635843a764..e2f7964af68982cf66ef83535bd38e35d00f9887 100644 --- a/src/pairs/transformations/merge_adjacent_blocks.py +++ b/src/pairs/transformations/blocks.py @@ -18,8 +18,3 @@ class MergeAdjacentBlocks(Mutator): ast_node.stmts = new_stmts return ast_node - - -def merge_adjacent_blocks(ast): - merge = MergeAdjacentBlocks(ast) - merge.mutate() diff --git a/src/pairs/transformations/add_device_copies.py b/src/pairs/transformations/devices.py similarity index 100% rename from src/pairs/transformations/add_device_copies.py rename to src/pairs/transformations/devices.py diff --git a/src/pairs/transformations/prioritize_scalar_ops.py b/src/pairs/transformations/expressions.py similarity index 64% rename from src/pairs/transformations/prioritize_scalar_ops.py rename to src/pairs/transformations/expressions.py index f43637d02a5f41a8ebd9bf700f93d56b662d1201..068f434e48016bd5475d7225d75209e7a1edb4a0 100644 --- a/src/pairs/transformations/prioritize_scalar_ops.py +++ b/src/pairs/transformations/expressions.py @@ -1,8 +1,45 @@ from pairs.ir.bin_op import BinOp +from pairs.ir.lit import Lit from pairs.ir.mutator import Mutator from pairs.ir.types import Types +class ReplaceSymbols(Mutator): + def __init__(self, ast): + super().__init__(ast) + + def mutate_Symbol(self, ast_node): + return ast_node.assign_to + + +class SimplifyExpressions(Mutator): + def __init__(self, ast): + super().__init__(ast) + + def mutate_BinOp(self, ast_node): + sim = ast_node.lhs.sim + ast_node.lhs = self.mutate(ast_node.lhs) + ast_node.rhs = self.mutate(ast_node.rhs) + ast_node.expressions = {i: self.mutate(e) for i, e in ast_node.expressions.items()} + + if ast_node.op in ['+', '-'] and ast_node.rhs == 0: + return ast_node.lhs + + if ast_node.op in ['+'] and ast_node.lhs == 0: + return ast_node.rhs + + if ast_node.op in ['*', '/'] and ast_node.rhs == 1: + return ast_node.lhs + + if ast_node.op == '*' and ast_node.lhs == 1: + return ast_node.rhs + + if ast_node.op == '*' and ast_node.lhs == 0: + return Lit(sim, 0 if Types.is_integer(ast_node.type()) else 0.0) + + return ast_node + + class PrioritizeScalarOps(Mutator): def __init__(self, ast): super().__init__(ast) @@ -43,8 +80,3 @@ class PrioritizeScalarOps(Mutator): #return BinOp(sim, rhs.rhs, BinOp(sim, rhs.lhs, lhs, op), op) return ast_node - - -def prioritize_scalar_ops(ast_node): - prioritize = PrioritizeScalarOps(ast_node) - prioritize.mutate() diff --git a/src/pairs/transformations/loops.py b/src/pairs/transformations/loops.py new file mode 100644 index 0000000000000000000000000000000000000000..1b3c3b56ec197c0a54b170965f7c468c524bf53e --- /dev/null +++ b/src/pairs/transformations/loops.py @@ -0,0 +1,53 @@ +from pairs.ir.bin_op import BinOp +from pairs.ir.loops import For, While +from pairs.ir.mutator import Mutator +from pairs.ir.properties import PropertyAccess + + +class LICM(Mutator): + def __init__(self, ast): + super().__init__(ast) + self.lifts = {} + self.loops = [] + + def mutate_For(self, ast_node): + self.lifts[id(ast_node)] = [] + self.loops.append(ast_node) + ast_node.iterator = self.mutate(ast_node.iterator) + ast_node.block = self.mutate(ast_node.block) + self.loops.pop() + return ast_node + + def mutate_While(self, ast_node): + self.lifts[id(ast_node)] = [] + self.loops.append(ast_node) + ast_node.cond = self.mutate(ast_node.cond) + ast_node.block = self.mutate(ast_node.block) + self.loops.pop() + return ast_node + + def mutate_Decl(self, ast_node): + if self.loops and isinstance(ast_node.elem, (BinOp, PropertyAccess)): + last_loop = self.loops[-1] + #print(f"variants = {last_loop.block.variants}, terminals = {ast_node.elem.terminals}") + if not last_loop.block.variants.intersection(ast_node.elem.terminals): + #print(f'lifting {ast_node.elem.id()}') + self.lifts[id(last_loop)].append(ast_node) + return None + + return ast_node + + def mutate_Block(self, ast_node): + new_stmts = [] + stmts = [self.mutate(s) for s in ast_node.stmts] + + for s in stmts: + if s is not None: + s_id = id(s) + if isinstance(s, (For, While)) and s_id in self.lifts: + new_stmts = new_stmts + self.lifts[s_id] + + new_stmts.append(s) + + ast_node.stmts = new_stmts + return ast_node diff --git a/src/pairs/transformations/lower.py b/src/pairs/transformations/lower.py index c2fb14f14d87671439bbf74197b7986938aba749..7bb0c471112e9b9365dcaf2197925891f2fe7962 100644 --- a/src/pairs/transformations/lower.py +++ b/src/pairs/transformations/lower.py @@ -13,11 +13,3 @@ class Lower(Mutator): return ast_node.lower() return ast_node - - -def lower_everything(ast): - nlowered = 1 - while nlowered > 0: - lower = Lower(ast) - lower.mutate() - nlowered = lower.lowered_nodes diff --git a/src/pairs/transformations/modules.py b/src/pairs/transformations/modules.py index d2a0127f69f61a560c43df541550a0722b090143..a0801d594db1507a9978919650d3ee258225fc4a 100644 --- a/src/pairs/transformations/modules.py +++ b/src/pairs/transformations/modules.py @@ -11,45 +11,11 @@ from pairs.ir.mutator import Mutator from pairs.ir.properties import UpdateProperty from pairs.ir.types import Types from pairs.ir.variables import Var, Deref -from pairs.ir.visitor import Visitor from functools import reduce import operator -class FetchModulesReferences(Visitor): - def __init__(self, ast): - super().__init__(ast) - self.module_stack = [] - self.writing = False - - def visit_Assign(self, ast_node): - self.writing = True - for c in ast_node.destinations(): - self.visit(c) - - self.writing = False - for c in ast_node.sources(): - self.visit(c) - - def visit_Module(self, ast_node): - self.module_stack.append(ast_node) - self.visit_children(ast_node) - self.module_stack.pop() - - def visit_Array(self, ast_node): - for m in self.module_stack: - m.add_array(ast_node, self.writing) - - def visit_Property(self, ast_node): - for m in self.module_stack: - m.add_property(ast_node, self.writing) - - def visit_Var(self, ast_node): - for m in self.module_stack: - m.add_variable(ast_node, self.writing) - - -class AddDereferencesToWriteVariables(Mutator): +class DereferenceWriteVariables(Mutator): def __init__(self, ast): super().__init__(ast) self.module_stack = [] @@ -153,11 +119,14 @@ class AddResizeLogic(Mutator): class ReplaceModulesByCalls(Mutator): - def __init__(self, ast, module_resizes, grow_fn=None): + def __init__(self, ast, grow_fn=None): super().__init__(ast) - self.module_resizes = module_resizes + self.module_resizes = None self.grow_fn = grow_fn if grow_fn is not None else (lambda x: x * 2) + def set_module_resizes(self, module_resizes): + self.module_resizes = module_resizes + def mutate_Module(self, ast_node): ast_node._block = self.mutate(ast_node._block) if ast_node.name == 'main': @@ -194,14 +163,3 @@ class ReplaceModulesByCalls(Mutator): return Block(sim, init_stmts + [While(sim, branch_cond, Block(sim, reset_stmts + [call] + resize_stmts))]) return call - - -def modularize(ast): - add_resize_logic = AddResizeLogic(ast) - add_resize_logic.mutate() - fetch_refs = FetchModulesReferences(ast) - fetch_refs.visit() - add_derefs_to_write_vars = AddDereferencesToWriteVariables(ast) - add_derefs_to_write_vars.mutate() - replace = ReplaceModulesByCalls(ast, add_resize_logic.module_resizes) - replace.mutate() diff --git a/src/pairs/transformations/replace_symbols.py b/src/pairs/transformations/replace_symbols.py deleted file mode 100644 index a23a5a26705504bddbfc8bed004809e2d62bd95e..0000000000000000000000000000000000000000 --- a/src/pairs/transformations/replace_symbols.py +++ /dev/null @@ -1,14 +0,0 @@ -from pairs.ir.mutator import Mutator - - -class ReplaceSymbols(Mutator): - def __init__(self, ast): - super().__init__(ast) - - def mutate_Symbol(self, ast_node): - return ast_node.assign_to - - -def replace_symbols(ast): - replace = ReplaceSymbols(ast) - replace.mutate() diff --git a/src/pairs/transformations/set_used_bin_ops.py b/src/pairs/transformations/set_used_bin_ops.py deleted file mode 100644 index ac26bf13f7f2b272b2558817dcfe7d345b3625a4..0000000000000000000000000000000000000000 --- a/src/pairs/transformations/set_used_bin_ops.py +++ /dev/null @@ -1,22 +0,0 @@ -from pairs.ir.visitor import Visitor - - -class SetUsedBinOps(Visitor): - def __init__(self, ast): - super().__init__(ast) - self.bin_ops = [] - - def visit_BinOp(self, ast_node): - ast_node.decl.used = True - self.visit_children(ast_node) - - def visit_Decl(self, ast_node): - pass - - def visit_PropertyAccess(self, ast_node): - ast_node.decl.used = True - self.visit_children(ast_node) - -def set_used_bin_ops(ast): - set_used_binops = SetUsedBinOps(ast) - set_used_binops.visit() diff --git a/src/pairs/transformations/simplify.py b/src/pairs/transformations/simplify.py deleted file mode 100644 index 4491f2c65e734e110ca649fd211dbf32c35a23ba..0000000000000000000000000000000000000000 --- a/src/pairs/transformations/simplify.py +++ /dev/null @@ -1,36 +0,0 @@ -from pairs.ir.lit import Lit -from pairs.ir.mutator import Mutator -from pairs.ir.types import Types - - -class SimplifyExpressions(Mutator): - def __init__(self, ast): - super().__init__(ast) - - def mutate_BinOp(self, ast_node): - sim = ast_node.lhs.sim - ast_node.lhs = self.mutate(ast_node.lhs) - ast_node.rhs = self.mutate(ast_node.rhs) - ast_node.expressions = {i: self.mutate(e) for i, e in ast_node.expressions.items()} - - if ast_node.op in ['+', '-'] and ast_node.rhs == 0: - return ast_node.lhs - - if ast_node.op in ['+'] and ast_node.lhs == 0: - return ast_node.rhs - - if ast_node.op in ['*', '/'] and ast_node.rhs == 1: - return ast_node.lhs - - if ast_node.op == '*' and ast_node.lhs == 1: - return ast_node.rhs - - if ast_node.op == '*' and ast_node.lhs == 0: - return Lit(sim, 0 if Types.is_integer(ast_node.type()) else 0.0) - - return ast_node - - -def simplify_expressions(ast_node): - simplify = SimplifyExpressions(ast_node) - simplify.mutate()