Each table row shows performance measurements for this Nuitka program with a particular command-line input value N.
N | CPU secs | Elapsed secs | Memory KB | Code B | ≈ CPU Load |
---|---|---|---|---|---|
6,000,000 | 322.64 | 244.93 | 10,636 | 1191 | 11% 9% 9% 9% 7% 5% 5% 5% |
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]))
Wed, 19 Jan 2022 22:18:30 GMT MAKE: make[1]: Vstupuje se do adresáře „/home/dundee/work/pybenchmarks/bencher/tmp/chameneosredux/tmp“ nuitka3 --remove-output chameneosredux.nuitka Nuitka-Options:INFO: Used command line options: --remove-output chameneosredux.nuitka Nuitka-Options:WARNING: You did not specify to follow or include anything but main program. Check options and make sure that is intended. Nuitka:INFO: Starting Python compilation with Nuitka '0.6.19.3' on Python '3.10' commercial None. Nuitka:INFO: Completed Python level compilation and optimization. Nuitka:INFO: Generating source code for C backend compiler. Nuitka:INFO: Running data composer tool for optimal constant value handling. Nuitka:INFO: Running C compilation via Scons. Nuitka-Scons:INFO: Backend C compiler: gcc (gcc). Nuitka-Scons:WARNING: You are not using ccache. Nuitka:INFO: Removing build directory 'chameneosredux.nuitka.build'. Nuitka:INFO: Successfully created 'chameneosredux.nuitka.bin'. cp chameneosredux.nuitka.bin chameneosredux.nuitka_run make[1]: Opouští se adresář „/home/dundee/work/pybenchmarks/bencher/tmp/chameneosredux/tmp“ 14.34s to complete and log all make actions COMMAND LINE: ./chameneosredux.nuitka_run 6000000 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 3995539 zero 3855918 zero 4148543 zero one two zero zero zero zero zero zero blue red yellow red yellow blue red yellow red blue 879584 zero 1451720 zero 1334408 zero 1267900 zero 1055717 zero 1363548 zero 1089987 zero 1181804 zero 1088736 zero 1286596 zero one two zero zero zero zero zero zero