orc-lang / orc

Orc programming language implementation
https://orc.csres.utexas.edu/
BSD 3-Clause "New" or "Revised" License
40 stars 3 forks source link

Merge materializable contexts and other changes made during ASPLOS optimization #220

Closed arthurp closed 5 years ago

arthurp commented 5 years ago

The improvements are complete and seem to be working on the unit tests.

This branch contains a series of hacks and changes which culminate in several large changes. The overall time-line is:

The diff is very large and reviewing the original commits is not going to be effective. The best approach is to check the diff from master: git diff -D -w master materializable-contexts. Or just let me explain it to you and we can discuss it.

Since github doesn't seem to show it, here is the diffstat:

 .gitignore                                         |   2 +
 OrcExamples/OrcSites/weather.orc                   |  15 -
 OrcScala/src/orc/InvocationBehavior.scala          |  41 +-
 OrcScala/src/orc/InvocationBehaviorUtilities.scala | 185 ------
 OrcScala/src/orc/OrcRuntimeInterface.scala         | 135 ++++-
 OrcScala/src/orc/ast/AST.scala                     |   2 +-
 OrcScala/src/orc/ast/ext/Extended.scala            |   2 +-
 OrcScala/src/orc/ast/oil/xml/OrcXML.scala          |   7 +-
 OrcScala/src/orc/ast/porc/Analysis.scala           |   6 +-
 OrcScala/src/orc/ast/porc/PorcAST.scala            |  66 +--
 OrcScala/src/orc/ast/porc/PorcInfixNotation.scala  |   4 +-
 OrcScala/src/orc/ast/porc/PrettyPrint.scala        |  13 +-
 OrcScala/src/orc/compile/OrcCompiler.scala         |  17 +-
 .../orc/compile/orctimizer/AnnotationHack.scala    |  13 +-
 .../compile/orctimizer/OrctimizerOrcCompiler.scala |  91 ++-
 .../orc/compile/orctimizer/OrctimizerToPorc.scala  |  20 +-
 OrcScala/src/orc/compile/parse/OrcParsers.scala    |  56 +-
 .../src/orc/compile/translate/ClassForms.scala     |   4 +-
 OrcScala/src/orc/error/runtime/HaltException.scala |  33 +-
 OrcScala/src/orc/lib/builtin/Accessors.scala       |  16 +-
 OrcScala/src/orc/lib/builtin/Datatypes.scala       |   3 +-
 OrcScala/src/orc/lib/builtin/Fundamental.scala     |   7 +-
 .../src/orc/lib/builtin/structured/Lists.scala     |   6 +-
 .../src/orc/lib/builtin/structured/Options.scala   |   3 +-
 .../src/orc/lib/builtin/structured/Records.scala   |   5 +-
 .../src/orc/lib/builtin/structured/Tuples.scala    |  19 +-
 OrcScala/src/orc/lib/comp/ComparisonSite.scala     |   2 +-
 OrcScala/src/orc/lib/includes/prelude/state.inc    | 101 ----
 OrcScala/src/orc/lib/math/Abs.scala                |   3 +-
 OrcScala/src/orc/lib/math/Add.scala                |   2 +-
 OrcScala/src/orc/lib/math/Div.scala                |   2 +-
 OrcScala/src/orc/lib/math/Exponent.scala           |   2 +-
 OrcScala/src/orc/lib/math/Mod.scala                |   2 +-
 OrcScala/src/orc/lib/math/Mult.scala               |   2 +-
 OrcScala/src/orc/lib/math/Sub.scala                |   2 +-
 .../src/orc/lib/progswap/AstEditOperation.scala    |  85 ---
 OrcScala/src/orc/lib/progswap/AstEditScript.scala  |  62 ---
 OrcScala/src/orc/lib/progswap/DeleteNode.scala     |  91 ---
 .../src/orc/lib/progswap/EditScriptCRGMW96.scala   | 211 -------
 .../src/orc/lib/progswap/FastMatchCRGMW96.scala    | 128 -----
 OrcScala/src/orc/lib/progswap/InsertNode.scala     |  32 --
 OrcScala/src/orc/lib/progswap/LCSMyers86.scala     | 123 ----
 OrcScala/src/orc/lib/progswap/MoveNode.scala       |  34 --
 OrcScala/src/orc/lib/progswap/ProgSwap.scala       | 185 ------
 OrcScala/src/orc/lib/progswap/ReplaceNode.scala    |  82 ---
 OrcScala/src/orc/lib/state/BoundedChannel.java     |  35 +-
 OrcScala/src/orc/lib/state/Cell.java               |  13 +-
 OrcScala/src/orc/lib/state/Channel.java            |  36 +-
 OrcScala/src/orc/lib/state/Counter.java            |   7 +-
 OrcScala/src/orc/lib/state/Dictionary.java         |  62 ---
 OrcScala/src/orc/lib/state/Flag.scala              |   3 +-
 OrcScala/src/orc/lib/state/Interval.java           | 126 -----
 OrcScala/src/orc/lib/state/Intervals.java          | 179 ------
 OrcScala/src/orc/lib/state/Ref.java                |  13 +-
 OrcScala/src/orc/lib/state/Semaphore.java          |  17 +-
 OrcScala/src/orc/lib/state/SyncChannel.java        |  19 +-
 OrcScala/src/orc/lib/str/Print.scala               |   6 +-
 OrcScala/src/orc/lib/str/Read.scala                |   3 +-
 OrcScala/src/orc/lib/time/IntegerTimeOrder.scala   |   3 +-
 OrcScala/src/orc/lib/time/Rclock.scala             |  53 +-
 OrcScala/src/orc/lib/time/Vawait.scala             |   5 +-
 OrcScala/src/orc/lib/time/Vclock.scala             |   5 +-
 OrcScala/src/orc/lib/time/Vtime.scala              |   5 +-
 OrcScala/src/orc/lib/util/Block.scala              |   5 +-
 OrcScala/src/orc/lib/util/CallableToRunnable.scala |   9 +-
 OrcScala/src/orc/lib/util/DumpState.scala          |   5 +-
 OrcScala/src/orc/lib/util/Error.scala              |   4 +-
 OrcScala/src/orc/lib/util/IterableToStream.scala   |  30 +-
 OrcScala/src/orc/lib/util/Prompt.scala             |  10 +-
 OrcScala/src/orc/lib/util/Random.scala             |  11 +-
 OrcScala/src/orc/lib/web/Browse.scala              |   8 +-
 OrcScala/src/orc/lib/web/HTTP.scala                |   9 +-
 OrcScala/src/orc/lib/web/ReadJSON.scala            |   3 +-
 OrcScala/src/orc/lib/web/WriteJSON.scala           |   3 +-
 OrcScala/src/orc/lib/xml/ReadXML.scala             |   2 +-
 OrcScala/src/orc/lib/xml/WriteXML.scala            |   2 +-
 OrcScala/src/orc/lib/xml/XmlSites.scala            |   3 +-
 OrcScala/src/orc/run/core/CallController.scala     |  69 ++-
 .../orc/run/core/ExternalSiteCallController.scala  |   8 +-
 OrcScala/src/orc/run/core/OrcSite.scala            |   6 +-
 OrcScala/src/orc/run/core/Token.scala              |  10 +-
 OrcScala/src/orc/run/core/VirtualClock.scala       |   2 +-
 .../run/distrib/token/LocationPinnedTuple.scala    |  19 +-
 .../extensions/ErrorOnUndefinedInvocation.scala    |   5 +-
 .../src/orc/run/extensions/SupportForRwait.scala   |   3 +-
 .../run/extensions/SupportForSiteInvocation.scala  |  45 +-
 OrcScala/src/orc/util/CmdLineParser.scala          |  26 +-
 OrcScala/src/orc/values/FastRecord.scala           |  66 +++
 OrcScala/src/orc/values/HasMembers.scala           |  61 +-
 OrcScala/src/orc/values/NumericsConfig.scala       |  69 ++-
 OrcScala/src/orc/values/OrcObject.scala            |  25 +-
 OrcScala/src/orc/values/OrcRecord.scala            |  24 +-
 OrcScala/src/orc/values/OrcTuple.scala             |  16 +-
 OrcScala/src/orc/values/OrcValue.scala             |  27 +-
 OrcScala/src/orc/values/ValueMetadata.scala        |  27 +
 OrcScala/src/orc/values/accessorUtils.scala        |  71 +++
 .../src/orc/values/sites/GenerateSiteClasses.scala | 256 +++++++++
 .../values/sites/InvocationBehaviorUtilities.scala |  68 +++
 OrcScala/src/orc/values/sites/InvokerMethod.scala  |  34 +-
 OrcScala/src/orc/values/sites/JavaProxies.scala    | 196 +++++--
 OrcScala/src/orc/values/sites/OrcSiteForm.scala    |   2 +-
 .../sites/OverloadedDirectInvokerMethod.scala      |  43 +-
 OrcScala/src/orc/values/sites/SiteMetadata.scala   |  20 +-
 OrcScala/src/orc/values/sites/Sites.scala          | 620 +++++++++++++++++----
 OrcScala/src/orc/values/sites/Sites0Util.scala     | 201 +++++++
 OrcScala/src/orc/values/sites/Sites1Util.scala     | 215 +++++++
 OrcScala/src/orc/values/sites/Sites2Util.scala     | 229 ++++++++
 OrcScala/src/orc/values/sites/Sites3Util.scala     | 243 ++++++++
 .../orc/values/sites/compatibility/DotSite.java    |  27 +-
 .../values/sites/compatibility/HasMembers.scala    |  78 +++
 .../sites/compatibility/OrcRuntimeInterface.scala  |  82 +++
 .../values/sites/compatibility/PartialSite.java    |   2 +-
 .../values/sites/compatibility/SiteAdaptor.scala   |  22 +-
 .../src/orc/values/sites/compatibility/Sites.scala | 316 +++++++++++
 .../sites/compatibility/deprecatedNames.scala      |  19 +
 OrcScala/src/orc/values/sites/invokerUtils.scala   |  78 +++
 OrcSites/src/orc/lib/fun/Eliza.java                |   2 +-
 OrcSites/src/orc/lib/gui/ListImpl.scala            |   6 +-
 OrcSites/src/orc/lib/gui/ListenerAdapters.scala    |   8 +-
 OrcSites/src/orc/lib/gui/SetSwingFontSize.scala    |   3 +-
 OrcSites/src/orc/lib/net/BingSearch.scala          |   9 +-
 OrcSites/src/orc/lib/net/JSONSite.java             |   3 +-
 OrcSites/src/orc/lib/net/KeyedHTTP.scala           |   2 +-
 OrcSites/src/orc/lib/net/MailerFactory.java        |   2 +-
 OrcSites/src/orc/lib/net/MicrosoftTranslator.scala |   9 +-
 OrcSites/src/orc/lib/net/NOAAWeather.java          | 419 --------------
 .../src/orc/lib/net/NoaaWeatherWireService.scala   |  10 +-
 OrcSites/src/orc/lib/net/ServletServer.scala       |  28 +-
 OrcSites/src/orc/lib/net/Twitter.scala             |  13 +-
 OrcSites/src/orc/lib/net/Webservice.java           |   2 +-
 OrcSites/src/orc/lib/net/XMPPConnection.java       |   9 +-
 OrcSites/src/orc/lib/net/YandexTranslate.scala     |   7 +-
 OrcSites/src/orc/lib/ui/GuiOAuthProvider.java      |   2 +-
 OrcTests/.launches/DistribTest.launch              |   2 +-
 ...ExamplesTestCase.launch => ExamplesTest.launch} |   4 +-
 OrcTests/.launches/PorcExamplesTest.launch         |   2 +-
 .../.launches/PorcSerializedExamplesTest.launch    |   5 +-
 OrcTests/src/orc/lib/Benchmark.scala               |  11 +-
 OrcTests/src/orc/lib/NumberOfRuntimeEngines.scala  |  22 +-
 OrcTests/src/orc/test/analysis/Rplot.pdf           | Bin 0 -> 16095 bytes
 .../orc/test/analysis/porce/benchmark-metadata.csv |   2 +
 .../analysis/porce/benchmark-problem-names.csv     |   1 +
 .../porce/implTypeVsBenchmarkAnalysisAndPlotting.R | 294 +++-------
 .../analysis/porce/scalingAnalysisAndPlotting.R    |  42 +-
 OrcTests/src/orc/test/item/distrib/WordCount.java  |   3 +
 .../orc/test/item/scalabenchmarks/BigSort.scala    |  59 +-
 .../orc/test/item/scalabenchmarks/NQueens.scala    |  12 +-
 .../src/orc/test/item/scalabenchmarks/Sieve.scala  |  11 +-
 .../orc/test/item/scalabenchmarks/ThreadRing.scala |   2 +
 .../orc/test/item/scalabenchmarks/Threads.scala    |   1 +
 .../orc/test/item/scalabenchmarks/WordCount.scala  |   3 +
 .../blackscholes/BlackScholes.scala                |   3 +
 .../blackscholes/BlackScholesPar.scala             |   1 +
 .../test/item/scalabenchmarks/dedup/Dedup.scala    |  10 +
 .../scalabenchmarks/dedup/DedupNestedPar.scala     |   1 +
 .../orc/test/item/scalabenchmarks/sssp/SSSP.scala  |   3 +
 .../item/scalabenchmarks/swaptions/Processor.scala |  10 +-
 .../scalabenchmarks/swaptions/SwaptionData.scala   |  13 +-
 .../scalabenchmarks/swaptions/SwaptionsPar.scala   |   2 +
 OrcTests/src/orc/test/proc/PorcEBenchmark.scala    |  10 +-
 .../orc/test/proc/porcEBenchmarkExperiments.scala  |  61 +-
 OrcTests/src/orc/test/util/JsonGenerator.scala     |   1 -
 OrcTests/src/orc/test/util/RemoteCommand.scala     |   3 +-
 OrcTests/test_data/functional_valid/channel2.orc   |  15 +
 OrcTests/test_data/functional_valid/dict.orc       |  12 -
 .../test_data/performance/bigsort/bigsort-opt.orc  |   7 +-
 .../performance/bigsort/bigsort-scala-opt.orc      |   1 +
 .../black-scholes/black-scholes-opt.orc            |   4 +
 OrcTests/test_data/performance/dedup/dedup-opt.orc |  10 +
 .../performance/distrib/wordcount/.gitignore       |   1 +
 .../map-reduce/wordcount-pure-orc-opt.orc          |   4 +
 .../performance/n-queens/8-queens-opt.orc          |  42 ++
 .../performance/{ => n-queens}/8-queens.orc        |  10 +-
 .../performance/sieve/savina_sieve-opt.orc         |   3 +
 .../performance/sssp/sssp-batched-opt.orc          |   5 +
 .../performance/swaptions/swaptions-naive-opt.orc  | 200 +++++++
 .../swaptions/swaptions-naive-scala-sim-opt.orc    |   2 +-
 .../swaptions/swaptions-naive-scala-sim.orc        |   2 +-
 .../swaptions-naive-scala-subroutines-opt.orc      |   2 +-
 .../swaptions-naive-scala-subroutines.orc          |   2 +-
 .../swaptions/swaptions-naive-scala-swaption.orc   |   2 +-
 .../performance/swaptions/swaptions-naive.orc      | 184 ++++++
 OrcTests/test_data/performance/threadring2.orc     |   2 +
 OrcTests/test_data/performance/threads.orc         |   6 +-
 PorcE/.classpath                                   |   2 +-
 PorcE/INSTALL                                      |  12 +-
 PorcE/src/orc/PorcEBackend.scala                   |   2 +-
 PorcE/src/orc/PorcEPolyglotLauncher.scala          |  32 +-
 PorcE/src/orc/compiler/porce/PorcToPorcE.scala     | 104 +++-
 PorcE/src/orc/run/distrib/porce/CounterProxy.scala |   4 +-
 .../src/orc/run/distrib/porce/DOrcExecution.scala  |   8 +-
 .../porce/DistributedInvocationInterceptor.scala   |   6 +-
 .../run/distrib/porce/LocationPinnedTuple.scala    |  63 ++-
 PorcE/src/orc/run/porce/AccessorCanGet.java        |  57 ++
 PorcE/src/orc/run/porce/AccessorGet.java           |  70 +++
 PorcE/src/orc/run/porce/Bind.java                  |  21 +-
 PorcE/src/orc/run/porce/FlushAllCounters.java      | 154 +++++
 PorcE/src/orc/run/porce/Force.java                 |  41 +-
 PorcE/src/orc/run/porce/GetField.java              |  29 +-
 PorcE/src/orc/run/porce/GetMethod.java             |  36 +-
 PorcE/src/orc/run/porce/Graft.java                 |  84 ++-
 PorcE/src/orc/run/porce/HaltToken.java             |  21 +-
 PorcE/src/orc/run/porce/IfLenientMethod.java       |   7 +
 PorcE/src/orc/run/porce/InternalPorcEError.java    |   5 +-
 .../orc/run/porce/InvokeCallRecordRootNode.java    |   2 +-
 PorcE/src/orc/run/porce/Kill.java                  |   5 +-
 PorcE/src/orc/run/porce/MaximumValueProfile.java   |  51 --
 PorcE/src/orc/run/porce/NewContinuation.java       |   4 +-
 PorcE/src/orc/run/porce/NewToken.java              |  15 +-
 PorcE/src/orc/run/porce/NodeBase.java              |  13 +
 PorcE/src/orc/run/porce/PorcELanguageBase.scala    |  28 +-
 PorcE/src/orc/run/porce/PorcERootNode.java         | 136 ++---
 .../src/orc/run/porce/ResettableBranchProfile.java |  76 ---
 PorcE/src/orc/run/porce/Resolve.java               |  37 +-
 PorcE/src/orc/run/porce/Sequence.java              |  31 +-
 PorcE/src/orc/run/porce/Spawn.java                 |  24 +-
 .../orc/run/porce/SpecializationConfiguration.java |  23 +-
 PorcE/src/orc/run/porce/StackCheckingDispatch.java |  43 +-
 PorcE/src/orc/run/porce/TryFinally.java            |   6 +
 PorcE/src/orc/run/porce/TryOnException.java        |   7 +
 PorcE/src/orc/run/porce/Write.java                 |   6 +
 PorcE/src/orc/run/porce/call/Call.java             |   6 +-
 PorcE/src/orc/run/porce/call/CallContinuation.java |   5 +-
 PorcE/src/orc/run/porce/call/CatchTailCall.java    |   6 +
 .../src/orc/run/porce/call/CatchTailDispatch.java  |  11 +
 PorcE/src/orc/run/porce/call/Dispatch.java         |  15 +
 PorcE/src/orc/run/porce/call/DispatchBase.java     |  30 +
 .../orc/run/porce/call/ExternalCPSDispatch.java    | 207 ++++++-
 .../orc/run/porce/call/ExternalDirectDispatch.java |   4 +-
 .../orc/run/porce/call/InterceptedDispatch.java    |   6 +-
 .../orc/run/porce/call/InternalCPSDispatch.java    | 295 ++++++++--
 PorcE/src/orc/run/porce/call/InvokerCanInvoke.java |  28 +-
 PorcE/src/orc/run/porce/call/InvokerInvoke.java    | 115 ++--
 .../orc/run/porce/call/InvokerInvokeDirect.java    | 284 ++++++----
 PorcE/src/orc/run/porce/call/TailCallLoop.java     |   7 +-
 .../porce/instruments/DumpSpecializations.scala    |   9 +-
 .../PorcENodeClassExecutionProfiler.scala          |   6 +-
 .../instruments/PorcENodeExecutionProfiler.scala   |   6 +-
 .../instruments/PorcNodeExecutionProfiler.scala    |   6 +-
 .../run/porce/profiles/MaximumValueProfile.java    |  53 ++
 .../porce/profiles/ResettableBranchProfile.java    |  75 +++
 .../run/porce/profiles/SingleBranchProfile.java    |  69 +++
 .../porce/{ => profiles}/ValueClassesProfile.java  |   3 +-
 .../src/orc/run/porce/runtime/CPSCallContext.scala | 152 +++--
 .../run/porce/runtime/CallClosureSchedulable.scala |   8 +-
 PorcE/src/orc/run/porce/runtime/Counter.scala      | 403 ++++++++------
 .../run/porce/runtime/InvocationInterceptor.scala  |   4 +-
 PorcE/src/orc/run/porce/runtime/Join.scala         |  11 +-
 PorcE/src/orc/run/porce/runtime/PorcEClosure.java  |  30 +-
 .../src/orc/run/porce/runtime/PorcEExecution.scala |  41 +-
 PorcE/src/orc/run/porce/runtime/PorcEObject.java   |  34 +-
 PorcE/src/orc/run/porce/runtime/PorcERuntime.scala |  63 ++-
 .../runtime/PorcEWithWorkStealingScheduler.scala   |   9 +-
 PorcE/src/orc/run/porce/runtime/Resolver.scala     |  54 +-
 .../orc/run/porce/runtime/SingleFutureReader.scala |  12 -
 PorcE/src/orc/run/porce/runtime/Terminator.scala   |   8 +-
 PorcE/src/orc/util/TraceOrcTask.scala              |  13 +-
 ScalaGraalAgent/.classpath                         |   7 +
 .../.externalToolBuilders/Build Jar.launch         |  13 +
 ScalaGraalAgent/.gitignore                         |   2 +
 ScalaGraalAgent/.project                           |  27 +
 .../.settings/org.eclipse.jdt.core.prefs           |  12 +
 ScalaGraalAgent/build.xml                          |  44 ++
 ScalaGraalAgent/lib/asm-6.2.jar                    | Bin 0 -> 111214 bytes
 ScalaGraalAgent/src/orc/scalagraalagent/Agent.java |  31 ++
 .../MarkModulesAsCompileConstant.java              |  39 ++
 266 files changed, 6763 insertions(+), 4355 deletions(-)
arthurp commented 5 years ago

John, as we discussed I don't think a normal review will be effective. Let's plan to go through it together. I do want your input and thoughts to make sure I haven't done anything super dumb.