Advertisement
Guest User

Untitled

a guest
Apr 1st, 2015
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.15 KB | None | 0 0
  1. ◆ 並列処理
  2. サンプルでActivatorというプロジェクト管理のライブラリを使っていたので、それを使用
  3. (sbtと同様なもの)
  4.  
  5. Activatorのインストール
  6. $ sudo brew install typesafe-activator
  7.  
  8. プロジェクトを作りたいディレクトリで下記実行(今回はminimal-scalaというものを使う)
  9. AC-A-069:scala_prac2 *****$ sudo activator new
  10. Password:
  11.  
  12. Enter an application name
  13. > test3
  14.  
  15. The new application will be created in /Users/*****/Desktop/scala_prac2/test3
  16.  
  17. Enter a template name, or hit tab to see a list of possible templates
  18. > minimal-scala
  19. OK, application "test3" is being created using the "minimal-scala" template.
  20.  
  21. To run "test3" from the command-line, run:
  22. /Users/*****/Desktop/scala_prac2/test3/activator run
  23.  
  24. To run the test for "test3" from the command-line, run:
  25. /Users/*****/Desktop/scala_prac2/test3/activator test
  26.  
  27. To run the Activator UI for "test3" from the command-line, run:
  28. /Users/*****/Desktop/scala_prac2/test3/activator ui
  29.  
  30. プロジェクトが作成されるので、そのディレクトリに移動
  31. 下記のように何もせずに実行すると、最初から入っているHelloWorldを出力するファイルが実行される
  32. MAC-A-069:scala_prac2 *****$ cd test3
  33. MAC-A-069:test3 *****$ ls
  34. LICENSE activator-launch-1.0.0.jar project
  35. activator build.sbt src
  36. MAC-A-069:test3 *****$ sudo ./activator run
  37. [info] Loading project definition from /Users/*****/Desktop/scala_prac2/test3/project
  38. [warn] Multiple resolvers having different access mechanism configured with same name 'typesafe-ivy-releases'. To avoid conflict, Remove duplicate project resolvers (`resolvers`) or rename publishing resolver (`publishTo`).
  39. [info] Updating {file:/Users/*****/Desktop/scala_prac2/test3/project/}test3-build...
  40. [info] Resolving org.fusesource.jansi#jansi;1.4 ...
  41. [info] Done updating.
  42. [info] Set current project to test3 (in build file:/Users/*****/Desktop/scala_prac2/test3/)
  43. [info] Updating {file:/Users/*****/Desktop/scala_prac2/test3/}test3...
  44. [info] Resolving jline#jline;2.11 ...
  45. [info] Done updating.
  46. [info] Compiling 1 Scala source to /Users/*****/Desktop/scala_prac2/test3/target/scala-2.11/classes...
  47. [info] Running com.example.Hello
  48. Hello, world!
  49. [success] Total time: 4 s, completed 2015/02/04 11:54:45
  50.  
  51. まず並列処理せず通常実行するプログラムと実行結果
  52. プログラムはsrc/main/scala/com/example/に置く
  53.  
  54. package com.example
  55.  
  56. object Parallel {
  57. def main(args: Array[String]) {
  58. (1 to 10).map { i =>
  59. println(i)
  60. Thread.sleep(500)
  61. }
  62. }
  63. }
  64.  
  65. MAC-A-069:test3 *****$ ./activator
  66. [info] Loading project definition from /Users/*****/Desktop/scala_prac2/test3/project
  67. [warn] Multiple resolvers having different access mechanism configured with same name 'typesafe-ivy-releases'. To avoid conflict, Remove duplicate project resolvers (`resolvers`) or rename publishing resolver (`publishTo`).
  68. [info] Set current project to test3 (in build file:/Users/*****/Desktop/scala_prac2/test3/)
  69. > runMain com.example.Parallel
  70. [info] Compiling 1 Scala source to /Users/*****/Desktop/scala_prac2/test3/target/scala-2.11/classes...
  71. [info] Running com.example.Parallel
  72. 1
  73. 2
  74. 3
  75. 4
  76. 5
  77. 6
  78. 7
  79. 8
  80. 9
  81. 10
  82. [success] Total time: 9 s, completed 2015/02/04 12:07:26
  83. > runMain com.example.Parallel
  84. [info] Running com.example.Parallel
  85. 1
  86. 2
  87. 3
  88. 4
  89. 5
  90. 6
  91. 7
  92. 8
  93. 9
  94. 10
  95. [success] Total time: 5 s, completed 2015/02/04 12:07:34
  96.  
  97. 1度目はコンパイルするので少々遅いがその後は早い
  98. 今回は5秒で実行が終わる
  99.  
  100. 次に並列処理
  101.  
  102. package com.example
  103.  
  104. object Parallel {
  105. def main(args: Array[String]) {
  106. (1 to 10).par.map { i =>
  107. println(i)
  108. Thread.sleep(500)
  109. }
  110. }
  111. }
  112.  
  113. MAC-A-069:test3 *****$ ./activator
  114. [info] Loading project definition from /Users/*****/Desktop/scala_prac2/test3/project
  115. [warn] Multiple resolvers having different access mechanism configured with same name 'typesafe-ivy-releases'. To avoid conflict, Remove duplicate project resolvers (`resolvers`) or rename publishing resolver (`publishTo`).
  116. [info] Set current project to test3 (in build file:/Users/*****/Desktop/scala_prac2/test3/)
  117. > runMain com.example.Parallel
  118. [info] Compiling 1 Scala source to /Users/*****/Desktop/scala_prac2/test3/target/scala-2.11/classes...
  119. [info] Running com.example.Parallel
  120. 1
  121. 2
  122. 3
  123. 6
  124. 4
  125. 8
  126. 7
  127. 5
  128. 9
  129. 10
  130. [success] Total time: 6 s, completed 2015/02/04 12:13:15
  131. > runMain com.example.Parallel
  132. [info] Running com.example.Parallel
  133. 1
  134. 3
  135. 8
  136. 6
  137. 2
  138. 7
  139. 4
  140. 9
  141. 5
  142. 10
  143. [success] Total time: 2 s, completed 2015/02/04 12:13:18
  144.  
  145. ループ処理の際に.parをつけるとコレクション(今回は1~10が入ったmap)が並列コレクションに変換され並列処理される。
  146. 並列コレクションを使用すると、プログラムを実行しているPCのCPUコア数に応じてスレッドを分割して実行します(※並列化のコストも掛かるので、要素数や処理内容によっては遅くなることもあります)。
  147. 実際に並列処理すると通常5秒かかっていた処理が2秒で終わる。
  148. ただ、順序がばらばらになるので注意
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement