0
i7-2960xm (4 코어 하이퍼 스레딩)에서 멀티 스레딩을 실험하는 동안 Groovy Gpars의 예상 성능이 저하되고 있습니다.Groovy Gpars가 병렬과 비교하여 성능이 좋지 않음
def nums = [36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36]
GParsPool.withPool(4) {
nums.eachParallel {
SplitTimer internalTimer = new SplitTimer()
println("fibRecursive(${it}): ${fibRecursive(it)}")
internalTimer.split("fibRecursive(${it})")
for (instance in internalTimer.splitTimes) {
println(instance)
}
}
}
병렬 fib(36)
가 약 1.9 초 걸리는 계산 :
def fibRecursive(int index) {
if (index == 0 || index == 1) {
return index
}
else {
return fibRecursive(index - 2) + fibRecursive(index - 1)
}
}
내가 현재 다음과 같은 코드를 사용하고 Gpars를 테스트하려면 : 내 테스트에서 나는 부하를 시뮬레이션하기 위해 재귀 FIB 계산기를 사용하고 withPool(4)
. withPool(1)
주위 내가 Gpars의 외부 함수를 호출 다소 유사하다 가정 1.4 초 정도 걸립니다하지만 0.4 초, 예를 들어, 소요 : 나는 성능 저하의 종류가있을 수 있습니다 이유
nums.each {
SplitTimer internalTimer = new SplitTimer()
println("fibRecursive(${it}): ${fibRecursive(it)}")
internalTimer.split("fibRecursive(${it})")
for (instance in internalTimer.splitTimes) {
println(instance)
}
}
누군가가 설명 할 수 있습니까? 감사!
여기 단지의 경우 내 SplitTimer입니다 :class SplitTimer {
long initialTime
int instances = 0
class Instance {
int index
String name
long time
def elapsed() {
return time - initialTime
}
def Instance(String instanceName) {
this.index = this.instances++
this.name = instanceName
this.time = System.nanoTime()
}
String toString() {
return "[Instance ${this.index}: \"${this.name}\" (${Formatter.elapsed(this.elapsed())} elapsed)]"
}
}
def splitTimes = []
def SplitTimer() {
def initialInstance = new Instance("Start")
this.initialTime = initialInstance.time
splitTimes.add(initialInstance)
}
def split(String instanceName) {
splitTimes.add(new Instance(instanceName))
}
}
class Formatter {
static int hours
static int minutes
static int seconds
static int nanoseconds
static setValues(time) {
nanoseconds = time % 10**9
seconds = time/10**9
minutes = seconds/60
hours = minutes/60
seconds %= 60
minutes %= 60
}
static elapsed(time) {
setValues(time)
return "${hours}:" + "${minutes}:".padLeft(3, "0") + "${seconds}.".padLeft(3, "0") + "${nanoseconds}".padLeft(9,"0")
}
static absolute(time) {
setValues(time)
hours %= 24
return "${hours}:".padLeft(3, "0") + "${minutes}:".padLeft(3, "0") + "${seconds}.".padLeft(3, "0") + "${nanoseconds}".padLeft(9,"0")
}
}