Each table row shows performance measurements for this Graal program with a particular command-line input value N.
| N | CPU secs | Elapsed secs | Memory KB | Code B | ≈ CPU Load | 
|---|
Read the ↓ make, command line, and program output logs to see how this program was run.
Read chameneos-redux benchmark to see what this program should do.
# The Computer Language Benchmarks Game
# http://benchmarksgame.alioth.debian.org/
# contributed by Daniel Nanz 2008-04-10
# 2to3
import sys
import _thread
import time
# colors and matching
creature_colors = ['blue', 'red', 'yellow']
def complement(c1, c2):
    if c1 == c2: return c1
    if c1 == 'blue':
        if c2 == 'red': return 'yellow'
        return 'red'
    if c1 == 'red':
        if c2 == 'blue': return 'yellow'
        return 'blue'
    if c2 == 'blue': return 'red'
    return 'blue'
compl_dict = dict(((c1, c2), complement(c1, c2))
                  for c1 in creature_colors
                  for c2 in creature_colors)
def check_complement(colors=creature_colors, compl=compl_dict):
    for c1 in colors:
        for c2 in colors:
            print('%s + %s -> %s' % (c1, c2, compl[(c1, c2)]))
    print('')
# reporting
def spellout(n):
    
    numbers = ['zero', 'one', 'two', 'three', 'four',
               'five', 'six', 'seven', 'eight', 'nine']
    return ' ' + ' '.join(numbers[int(c)] for c in str(n))
def report(input_zoo, met, self_met):
    print(' ' + ' '.join(input_zoo))
    for m, sm in zip(met, self_met):
        print(str(m) + spellout(sm))
    print(spellout(sum(met)) + '\n')
# the zoo
def creature(my_id, venue, my_lock_acquire, in_lock_acquire, out_lock_release):
    while True:
        my_lock_acquire()   # only proceed if not already at meeting place
        in_lock_acquire()   # only proceed when holding in_lock
        venue[0] = my_id    # register at meeting place
        out_lock_release()  # signal "registration ok"
def let_them_meet(meetings_left, input_zoo,
                  compl=compl_dict, allocate=_thread.allocate_lock):
    # prepare
    c_no = len(input_zoo)
    venue = [-1]
    met = [0] * c_no
    self_met = [0] * c_no
    colors = input_zoo[:]
    
    in_lock = allocate()
    in_lock_acquire = in_lock.acquire     # function aliases
    in_lock_release = in_lock.release     # (minor performance gain)
    in_lock_acquire()
    out_lock = allocate()
    out_lock_release = out_lock.release
    out_lock_acquire = out_lock.acquire
    out_lock_acquire()
    locks = [allocate() for c in input_zoo]
    
    # let creatures wild
    for ci in range(c_no):
        args = (ci, venue, locks[ci].acquire, in_lock_acquire, out_lock_release)
        new = _thread.start_new_thread(creature, args)
    time.sleep(0.05)     # to reduce work-load imbalance
    
    in_lock_release()   # signal "meeting_place open for registration"
    out_lock_acquire()  # only proceed with a "registration ok" signal
    id1 = venue[0]
    while meetings_left > 0:
        in_lock_release()
        out_lock_acquire()
        id2 = venue[0]
        if id1 != id2:
            new_color = compl[(colors[id1], colors[id2])]
            colors[id1] = new_color
            colors[id2] = new_color
            met[id1] += 1
            met[id2] += 1
        else:
            self_met[id1] += 1
            met[id1] += 1
        meetings_left -= 1
        if meetings_left > 0:
            locks[id1].release()  # signal "you were kicked from meeting place"
            id1 = id2
        else:
            report(input_zoo, met, self_met)
           
def chameneosiate(n):
    check_complement()
    let_them_meet(n, ['blue', 'red', 'yellow'])
    let_them_meet(n, ['blue', 'red', 'yellow', 'red', 'yellow',
                      'blue', 'red', 'yellow', 'red', 'blue'])
    #print ''
chameneosiate(int(sys.argv[1]))       
Mon, 20 Sep 2021 11:47:30 GMT COMMAND LINE: /usr/lib/jvm/java-8-graalvm/bin/graalpython chameneosredux.graal 6000000 PROGRAM FAILED PROGRAM OUTPUT NOT CHECKED: blue + blue -> blue blue + red -> yellow blue + yellow -> red red + blue -> yellow red + red -> red red + yellow -> blue yellow + blue -> red yellow + red -> blue yellow + yellow -> yellow blue red yellow 4027405 zero 3325451 zero 4647144 zero one two zero zero zero zero zero zero blue red yellow red yellow blue red yellow red blue 1448271 zero 1056042 zero 1209972 zero 1163064 zero 1186880 zero 1235008 zero 1140382 zero 1236604 zero 1202242 zero 1121535 zero one two zero zero zero zero zero zero ERROR: com.oracle.svm.core.jdk.UnsupportedFeatureError: The deprecated method Thread.resume is not supported org.graalvm.polyglot.PolyglotException: com.oracle.svm.core.jdk.UnsupportedFeatureError: The deprecated method Thread.resume is not supported at com.oracle.svm.core.util.VMError.unsupportedFeature(VMError.java:88) at java.lang.Thread.resume0(Thread.java:467) at java.lang.Thread.resume(Thread.java:1058) at java.lang.Thread.stop(Thread.java:849) at com.oracle.graal.python.runtime.PythonContext.joinThreads(PythonContext.java:1223) at com.oracle.graal.python.runtime.PythonContext.finalizeContext(PythonContext.java:1060) at com.oracle.graal.python.PythonLanguage.finalizeContext(PythonLanguage.java:248) at com.oracle.graal.python.PythonLanguage.finalizeContext(PythonLanguage.java:107) at com.oracle.truffle.api.LanguageAccessor$LanguageImpl.finalizeContext(LanguageAccessor.java:346) at com.oracle.truffle.polyglot.PolyglotLanguageContext.finalizeContext(PolyglotLanguageContext.java:376) at com.oracle.truffle.polyglot.PolyglotContextImpl.finalizeContext(PolyglotContextImpl.java:2309) at com.oracle.truffle.polyglot.PolyglotContextImpl.finishClose(PolyglotContextImpl.java:2037) at com.oracle.truffle.polyglot.PolyglotContextImpl.closeImpl(PolyglotContextImpl.java:1987) at com.oracle.truffle.polyglot.PolyglotContextImpl.closeAndMaybeWait(PolyglotContextImpl.java:1424) at com.oracle.truffle.polyglot.PolyglotContextImpl.close(PolyglotContextImpl.java:1406) at com.oracle.truffle.polyglot.PolyglotContextDispatch.close(PolyglotContextDispatch.java:72) at org.graalvm.polyglot.Context.close(Context.java:801) at org.graalvm.polyglot.Context.close(Context.java:822) at com.oracle.graal.python.shell.GraalPythonMain.launch(GraalPythonMain.java:618) at org.graalvm.launcher.AbstractLanguageLauncher.launch(AbstractLanguageLauncher.java:124) at org.graalvm.launcher.AbstractLanguageLauncher.launch(AbstractLanguageLauncher.java:71) at com.oracle.graal.python.shell.GraalPythonMain.main(GraalPythonMain.java:66) Caused by: Attached Guest Language Frames (0) Internal GraalVM error, please report at https://github.com/oracle/graal/issues/.