diff --git a/examples/aobench/aobench.vcxproj b/examples/aobench/aobench.vcxproj index 58c947dc..48e26e40 100644 --- a/examples/aobench/aobench.vcxproj +++ b/examples/aobench/aobench.vcxproj @@ -87,18 +87,22 @@ true $(ProjectDir)..\..;$(ExecutablePath) + ao true $(ExecutablePath);$(ProjectDir)..\.. + ao false $(ProjectDir)..\..;$(ExecutablePath) + ao false $(ProjectDir)..\..;$(ExecutablePath) + ao @@ -173,4 +177,4 @@ - \ No newline at end of file + diff --git a/examples/mandelbrot_tasks/mandelbrot_tasks.vcxproj b/examples/mandelbrot_tasks/mandelbrot_tasks.vcxproj index 794869af..b92de72f 100644 --- a/examples/mandelbrot_tasks/mandelbrot_tasks.vcxproj +++ b/examples/mandelbrot_tasks/mandelbrot_tasks.vcxproj @@ -65,18 +65,22 @@ true $(ProjectDir)..\..;$(ExecutablePath) + mandelbrot true $(ProjectDir)..\..;$(ExecutablePath) + mandelbrot false $(ProjectDir)..\..;$(ExecutablePath) + mandelbrot false $(ProjectDir)..\..;$(ExecutablePath) + mandelbrot diff --git a/examples/perf.py b/examples/perf.py index 5620bbfb..8503bd8c 100755 --- a/examples/perf.py +++ b/examples/perf.py @@ -8,11 +8,17 @@ import operator import time import glob import string +import platform def build_test(): global build_log - os.system("make clean >> "+build_log) - return os.system("make >> "+build_log+" 2>> "+build_log) + global is_windows + if is_windows == False: + os.system("make clean >> "+build_log) + return os.system("make >> "+build_log+" 2>> "+build_log) + else: + os.system("msbuild /t:clean >> " + build_log) + return os.system("msbuild /V:m /p:Platform=x64 /p:Configuration=Release /p:TargetDir=.\ /t:rebuild >> " + build_log) def execute_test(command): global perf_temp @@ -38,7 +44,7 @@ def run_test(command, c1, c2, test): for line in open(perf_temp): # we take test output if "speedup" in line: # we are interested only in lines with speedup if j == c1: # we are interested only in lines with c1 numbers - print line + sys.stdout.write(line) line = line.expandtabs(0) line = line.replace("("," ") line = line.split(",") @@ -66,10 +72,22 @@ def cpu_get(): #returns cpu_usage def cpu_check(): - cpu1 = cpu_get() - time.sleep(1) - cpu2 = cpu_get() - cpu_percent = (float(cpu1[0] - cpu2[0])/float(cpu1[1] - cpu2[1]))*100 + if is_windows == False: + cpu1 = cpu_get() + time.sleep(1) + cpu2 = cpu_get() + cpu_percent = (float(cpu1[0] - cpu2[0])/float(cpu1[1] - cpu2[1]))*100 + else: + os.system("wmic cpu get loadpercentage /value > cpu_temp") + c = open("cpu_temp", 'r') + c_lines = c.readlines() + c.close() + os.remove("cpu_temp") + t = "0" + for i in c_lines[2]: + if i.isdigit(): + t = t + i + cpu_percent = int(t) return cpu_percent #returns geomean of list @@ -88,7 +106,7 @@ def geomean(par): #test[2] - list of results with tasks #test[1] or test[2] may be empty def print_answer(answer): - print "Name of test:\t\tISPC:\tISPC + tasks:" + sys.stdout.write("Name of test:\t\tISPC:\tISPC + tasks:\n") max_t = [0,0] diff_t = [0,0] geomean_t = [0,0] @@ -122,31 +140,45 @@ parser.add_option('-p', '--path', dest='path', help='path to examples directory', default="./") (options, args) = parser.parse_args() +global is_windows +is_windows = (platform.system() == 'Windows' or + 'CYGWIN_NT' in platform.system()) + # save corrent path pwd = os.getcwd() pwd = pwd + os.sep +if is_windows: + pwd = "..\\" # check if cpu usage is low now -cpu1 = cpu_get() -time.sleep(1) -cpu2 = cpu_get() -cpu_percent = (float(cpu1[0] - cpu2[0])/float(cpu1[1] - cpu2[1]))*100 cpu_percent = cpu_check() if cpu_percent > 20: sys.stdout.write("Warning: CPU Usage is very high.\n") sys.stdout.write("Close other applications.\n") -# check that required compiler exists +# check that required compilers exist PATH_dir = string.split(os.getenv("PATH"), os.pathsep) compiler_exists = False +ref_compiler_exists = False +if is_windows == False: + compiler = "ispc" + ref_compiler = "g++" +else: + compiler = "ispc.exe" + ref_compiler = "cl.exe" for counter in PATH_dir: - if os.path.exists(counter + os.sep + "ispc"): + if os.path.exists(counter + os.sep + compiler): compiler_exists = True - break + if os.path.exists(counter + os.sep + ref_compiler): + ref_compiler_exists = True if not compiler_exists: sys.stderr.write("Fatal error: ISPC compiler not found.\n") sys.stderr.write("Added path to ispc compiler to your PATH variable.\n") sys.exit() +if not ref_compiler_exists: + sys.stderr.write("Fatal error: reference compiler %s not found.\n" % ref_compiler) + sys.stderr.write("Added path to %s compiler to your PATH variable.\n" % ref_compiler) + sys.exit() # checks that config file exists path_config = os.path.normpath(options.config) @@ -168,8 +200,12 @@ length = len(lines) # prepare build.log and perf_temp files global build_log build_log = pwd + "build.log" -if os.path.exists(build_log): - os.remove(build_log) +if is_windows == False: + if os.path.exists(build_log): + os.remove(build_log) +else: + if os.path.exists("build.log"): + os.remove("build.log") global perf_temp perf_temp = pwd + "perf_temp" @@ -194,7 +230,10 @@ while i < length-2: # read parameters of test command = lines[i+2] command = command[:-1] - command = "./"+command + " >> " + perf_temp + if is_windows == False: + command = "./"+command + " >> " + perf_temp + else: + command = "x64\\Release\\"+command + " >> " + perf_temp # parsing config parameters next_line = lines[i+3] if next_line[0] == "!": # we should take only one part of test output diff --git a/examples/tasksys.cpp b/examples/tasksys.cpp index 10f3c439..04c051a2 100644 --- a/examples/tasksys.cpp +++ b/examples/tasksys.cpp @@ -344,7 +344,7 @@ static inline void lMemFence() { // Windows atomic functions already contain the fence // KNC doesn't need the memory barrier -#if !defined ISPC_IS_KNC || !defined ISPC_IS_WINDOWS +#if !defined ISPC_IS_KNC && !defined ISPC_IS_WINDOWS __asm__ __volatile__("mfence":::"memory"); #endif } @@ -374,7 +374,7 @@ lAtomicCompareAndSwapPointer(void **v, void *newValue, void *oldValue) { static int32_t lAtomicCompareAndSwap32(volatile int32_t *v, int32_t newValue, int32_t oldValue) { #ifdef ISPC_IS_WINDOWS - return InterlockedCompareExchange(v, newValue, oldValue); + return InterlockedCompareExchange((volatile LONG *)v, newValue, oldValue); #else int32_t result; __asm__ __volatile__("lock\ncmpxchgl %2,%1" @@ -389,7 +389,7 @@ lAtomicCompareAndSwap32(volatile int32_t *v, int32_t newValue, int32_t oldValue) static inline int32_t lAtomicAdd(volatile int32_t *v, int32_t delta) { #ifdef ISPC_IS_WINDOWS - return InterlockedAdd(v, delta); + return InterlockedAdd((volatile LONG *)v, delta); #else int32_t origValue; __asm__ __volatile__("lock\n"