我想我已经实现了一些错误的代码.我无法弄清楚为什么我的排序(使用arrays.sort)在"并行"版本中比在非并行版本中花费更长时间(显然是将两个数组重新组合在一起,但我认为它不会添加更多的时间).如果有人可以指出我正在犯的任何错误或任何改进非并行版本的并行版本的技巧,我将不胜感激.我能够更有效地进行阵列合并,甚至可以并行进行吗?如果是这样,实施的最佳做法是什么.任何帮助将不胜感激.
import java.util.Arrays
import scala.concurrent._
import scala.collection._
trait Sorts {
def doSort(a: Array[Double]): Array[Double]
}
object Simple extends Sorts {
def doSort(a: Array[Double]) = {
Arrays.sort(a)
a
}
}
object Parallel extends Sorts {
def doSort(a: Array[Double]) = {
val newArray = new Array[Double](a.length)
val aLength = (a.length)
val aSplit = ((a.length / 2).floor).toInt
ops.par(Arrays.sort(a, 0, aSplit), Arrays.sort(a, (aSplit + 1), aLength))
def merge(w: Int, x: Int, y: Int) {
var i = w
var j = x
var k …Run Code Online (Sandbox Code Playgroud) 我有一个类,有多种方法和成员。当我创建此类的实例时,我会在第一个类中创建另一个类的实例。第二类中的一些方法需要知道第一个类的哪个实例正在运行。目前,我正在尝试将“this”传递到接受类型firstClass的参数中。我究竟做错了什么?同样,我只是想让第二个类实例知道它属于哪个第一个类实例,以便它可以从中调用公共方法和成员。
编辑:代码示例:
def main(args:Array[String]) : Unit = {
val objectOne = new classOne
}
class classOne {
val mutableBuffer = mutable.Buffer[String]
val objectTwo = new classTwo
objectTwo.doThis(this)
}
class classTwo {
def doThis (exA:classOne) = {
exA.mutableBuffer += "Adding text to a Buffer in object One"
}
}
Run Code Online (Sandbox Code Playgroud) 我试图发出一个系统命令来运行FreeSurfer的mri_convert.您并不需要了解mri_convert是什么,因为您必须了解进程如何从scala转移到系统.代码在很大程度上起作用,但是当我尝试发送带有空格的文件路径时,它会中断(即使在我用空格替换之后\).我将在下面发布我的代码,然后使用不包含路径空间的目录的文件输出,然后从带有空格的目录的文件路径发布.
def executeAll(): Boolean = {
while (dataBuf.length != 0) {
val dir = directory + "subjects/" + dataBuf.first.subjectID + "/mri/orig"
val expr = """\s+""".r
val path = expr.replaceAllIn((dataBuf.first.path), """\\ """)
val folder = new File(dir)
val execute = freesurfer + """bin/mri_convert -it dicom -ot mgz -ii """ + path + """ -oi """ + dir + """/001.mgz"""
if (folder.mkdirs()) {
val command = Process(execute, folder, ("FREESURFER_HOME", freesurfer))
val exitCode = command.!
println(command.toString())
}
dataBuf.remove(dataBuf.indexOf(dataBuf.first))
}
println("DONE")
dataListView.listData …Run Code Online (Sandbox Code Playgroud)