[clfft] 64/64: Revert "Merge branch 'master' into develop"

Jérôme Kieffer kieffer-guest at moszumanska.debian.org
Wed May 20 07:33:38 UTC 2015


This is an automated email from the git hooks/post-receive script.

kieffer-guest pushed a commit to branch develop
in repository clfft.

commit 3cedf9bc388ce15f740314e9a7c221cdd0f8a51e
Author: Jerome Kieffer <jerome.kieffer at esrf.fr>
Date:   Fri Apr 24 14:25:57 2015 +0200

    Revert "Merge branch 'master' into develop"
    
    This reverts commit 250e45d50484cd8290401407ac512ae62692d27f, reversing
    changes made to b38f31c23872224861694565e4a8324de18d2e60.
---
 README.md                                 |  79 -----
 src/CMakeLists.txt                        |   8 +-
 src/scripts/perf/errorHandler.py          |  37 ++-
 src/scripts/perf/fftPerformanceTesting.py |  63 ++--
 src/scripts/perf/measurePerformance.py    | 241 ++++++++-------
 src/scripts/perf/performanceUtility.py    |  44 +--
 src/scripts/perf/plotPerformance.py       | 467 +++++++++++++++---------------
 7 files changed, 415 insertions(+), 524 deletions(-)

diff --git a/README.md b/README.md
index d8c7e9f..d981d2f 100644
--- a/README.md
+++ b/README.md
@@ -100,7 +100,6 @@ forward transform
 
 int main( void )
 {
-<<<<<<< HEAD
         cl_int err;
         cl_platform_id platform = 0;
         cl_device_id device = 0;
@@ -177,84 +176,6 @@ int main( void )
         clReleaseContext( ctx );
 
         return ret;
-=======
-    cl_int err;
-    cl_platform_id platform = 0;
-    cl_device_id device = 0;
-    cl_context_properties props[3] = { CL_CONTEXT_PLATFORM, 0, 0 };
-    cl_context ctx = 0;
-    cl_command_queue queue = 0;
-    cl_mem bufX;
-	float *X;
-    cl_event event = NULL;
-    int ret = 0;
-	size_t N = 16;
-	
-	/* FFT library realted declarations */
-	clfftPlanHandle planHandle;
-	clfftDim dim = CLFFT_1D;
-	size_t clLengths[1] = {N};
-                
-    /* Setup OpenCL environment. */
-    err = clGetPlatformIDs( 1, &platform, NULL );
-    err = clGetDeviceIDs( platform, CL_DEVICE_TYPE_GPU, 1, &device, NULL );
-
-    props[1] = (cl_context_properties)platform;
-    ctx = clCreateContext( props, 1, &device, NULL, NULL, &err );
-    queue = clCreateCommandQueue( ctx, device, 0, &err );
-
-    /* Setup clFFT. */
-	clfftSetupData fftSetup;
-	err = clfftInitSetupData(&fftSetup);
-	err = clfftSetup(&fftSetup);
-
-	/* Allocate host & initialize data. */
-	/* Only allocation shown for simplicity. */
-	X = (float *)malloc(N * 2 * sizeof(*X));
-                
-    /* Prepare OpenCL memory objects and place data inside them. */
-    bufX = clCreateBuffer( ctx, CL_MEM_READ_WRITE, N * 2 * sizeof(*X), NULL, &err );
-
-    err = clEnqueueWriteBuffer( queue, bufX, CL_TRUE, 0,
-	N * 2 * sizeof( *X ), X, 0, NULL, NULL );
-
-	/* Create a default plan for a complex FFT. */
-	err = clfftCreateDefaultPlan(&planHandle, ctx, dim, clLengths);
-	
-	/* Set plan parameters. */
-	err = clfftSetPlanPrecision(planHandle, CLFFT_SINGLE);
-	err = clfftSetLayout(planHandle, CLFFT_COMPLEX_INTERLEAVED, CLFFT_COMPLEX_INTERLEAVED);
-	err = clfftSetResultLocation(planHandle, CLFFT_INPLACE);
-                                
-    /* Bake the plan. */
-	err = clfftBakePlan(planHandle, 1, &queue, NULL, NULL);
-	
-	/* Execute the plan. */
-	err = clfftEnqueueTransform(planHandle, CLFFT_FORWARD, 1, &queue, 0, NULL, NULL, &bufX, NULL, NULL);
-
-	/* Wait for calculations to be finished. */
-	err = clFinish(queue);
-
-	/* Fetch results of calculations. */
-	err = clEnqueueReadBuffer( queue, bufX, CL_TRUE, 0, N * 2 * sizeof( *X ), X, 0, NULL, NULL );
-
-    /* Release OpenCL memory objects. */
-    clReleaseMemObject( bufX );
-
-	free(X);
-	
-	/* Release the plan. */
-	err = clfftDestroyPlan( &planHandle );
-
-    /* Release clFFT library. */
-    clfftTeardown( );
-
-    /* Release OpenCL working objects. */
-    clReleaseCommandQueue( queue );
-    clReleaseContext( ctx );
-
-    return ret;
->>>>>>> master
 }
 ```
 
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 89e7597..d74cdcb 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -40,11 +40,7 @@ if( NOT DEFINED CLFFT_VERSION_MAJOR )
 endif( )
 
 if( NOT DEFINED CLFFT_VERSION_MINOR )
-<<<<<<< HEAD
     set( CLFFT_VERSION_MINOR 5 )
-=======
-    set( CLFFT_VERSION_MINOR 4 )
->>>>>>> master
 endif( )
 
 if( NOT DEFINED CLFFT_VERSION_PATCH )
@@ -52,7 +48,7 @@ if( NOT DEFINED CLFFT_VERSION_PATCH )
 endif( )
 
 set( CLFFT_VERSION "${CLFFT_VERSION_MAJOR}.${CLFFT_VERSION_MINOR}.${CLFFT_VERSION_PATCH}")
-	
+
 # This is incremented when the ABI to the library changes
 set( CLFFT_SOVERSION 2 )
 
@@ -206,7 +202,7 @@ elseif( CMAKE_COMPILER_IS_GNUCXX )
 		# we only want c++0x if we're using gcc 4.5.2
 		set( CMAKE_CXX_FLAGS "-std=c++0x ${CMAKE_CXX_FLAGS}" )
 	endif()
-	
+
 	set( CMAKE_CXX_FLAGS "-pthread ${CMAKE_CXX_FLAGS}" )
 	set( CMAKE_C_FLAGS "-pthread ${CMAKE_C_FLAGS}" )
 
diff --git a/src/scripts/perf/errorHandler.py b/src/scripts/perf/errorHandler.py
index dd39486..8471f9d 100644
--- a/src/scripts/perf/errorHandler.py
+++ b/src/scripts/perf/errorHandler.py
@@ -1,13 +1,12 @@
-#!/usr/bin/env python2
 # ########################################################################
 # Copyright 2013 Advanced Micro Devices, Inc.
-#
+# 
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at
-#
+# 
 # http://www.apache.org/licenses/LICENSE-2.0
-#
+# 
 # Unless required by applicable law or agreed to in writing, software
 # distributed under the License is distributed on an "AS IS" BASIS,
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -16,8 +15,8 @@
 # ########################################################################
 
 #---------------------------------File Note------------------------------------
-# Date: 27 January 2012
-# This file defines all the error code and error handler mechanism
+#Date: 27 January 2012
+#This file defines all the error code and error handler mechanism
 #--------------------------------Global Variables------------------------------
 
 UINS_CAT = 100
@@ -25,12 +24,12 @@ WIN_REG_SEARCH_FAIL = 101
 UNIMPL_APP = 200
 SYS_ERR = 300
 TIME_OUT = 400
-DIM_INCO_FILE_FMT = 500  # incorrect file format for dimension
-DIM_FILE_VAL_INCO = 501  # Value coming from dimension file is incorrect
+DIM_INCO_FILE_FMT = 500 #incorrect file format for dimension
+DIM_FILE_VAL_INCO = 501 #Value coming from dimension file is incorrect
 
-# __errorTable : Defines all the errors in the system. Add a new error code and
-#               error message here
-"""Error table is defined as private to this module"""
+#__errorTable : Defines all the errors in the system. Add a new error code and
+#               error message here 
+"""Error table is defined as private to this module""" 
 errorTable = {
               UINS_CAT: 'Application is not able to find the installed catalyst',
               WIN_REG_SEARCH_FAIL: 'Windows Registry search for catalysts version is unsuccessful',
@@ -42,25 +41,25 @@ errorTable = {
               }
 
 #--------------------------------Class Definitions-----------------------------
-class TimeoutException(Exception):
+class TimeoutException(Exception): 
     pass
 
 """Base class for handling all the application generated exception"""
 class ApplicationException(Exception):
-
-    def __init__(self, fileName, errno, msg=""):
+    
+    def __init__(self, fileName, errno, msg = ""):
         self.fileName = fileName
         self.errno = errno
         self.mess = errorTable[errno] + msg
-        self.message = 'Application ERROR:' + repr(self.fileName + '-' + str(self.errno) + '-' + self.mess)
-
+        self.message = 'Application ERROR:'+repr(self.fileName+'-'+str(self.errno)+'-'+self.mess)
+        
     def __str__(self):
-        return repr(self.fileName + '-' + str(self.errno) + '-' + self.mess)
-
+        return repr(self.fileName+'-'+str(self.errno)+'-'+self.mess)
+    
 
 #--------------------------------Global Function-------------------------------
 if __name__ == '__main__':
-    # print errorTable
+    #print errorTable
     try:
         raise ApplicationException('errorHandler', SYS_ERR)
 
diff --git a/src/scripts/perf/fftPerformanceTesting.py b/src/scripts/perf/fftPerformanceTesting.py
index b638d5b..2d1df69 100644
--- a/src/scripts/perf/fftPerformanceTesting.py
+++ b/src/scripts/perf/fftPerformanceTesting.py
@@ -1,13 +1,12 @@
-#!/usr/bin/env python2
 # ########################################################################
 # Copyright 2013 Advanced Micro Devices, Inc.
-#
+# 
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at
-#
+# 
 # http://www.apache.org/licenses/LICENSE-2.0
-#
+# 
 # Unless required by applicable law or agreed to in writing, software
 # distributed under the License is distributed on an "AS IS" BASIS,
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -16,7 +15,7 @@
 # ########################################################################
 
 import itertools
-import re  # gex
+import re#gex
 import subprocess
 import os
 import sys
@@ -26,11 +25,10 @@ from datetime import datetime
 
 tableHeader = 'lengthx,lengthy,lengthz,batch,device,inlay,outlay,place,precision,label,GFLOPS'
 
-
 class TestCombination:
     def __init__(self,
                  lengthx, lengthy, lengthz, batchsize,
-                 device, inlayout, outlayout, placeness, precision,
+                 device, inlayout, outlayout, placeness, precision,                 
                  label):
         self.x = lengthx
         self.y = lengthy
@@ -46,7 +44,6 @@ class TestCombination:
     def __str__(self):
         return self.x + 'x' + self.y + 'x' + self.z + ':' + self.batchsize + ', ' + self.device + ', ' + self.inlayout + '/' + self.outlayout + ', ' + self.placeness + ', ' + self.precision + ' -- ' + self.label
 
-
 class GraphPoint:
     def __init__(self,
                  lengthx, lengthy, lengthz, batchsize,
@@ -66,7 +63,6 @@ class GraphPoint:
         # ALL members must be represented here (x, y, z, batch, device, label, etc)
         return self.x + 'x' + self.y + 'x' + self.z + ':' + self.batchsize + ', ' + self.precision + ' precision, ' + self.device + ', -- ' + self.label + '; ' + self.gflops
 
-
 class TableRow:
     # parameters = class TestCombination instantiation
     def __init__(self, parameters, gflops):
@@ -76,8 +72,7 @@ class TableRow:
     def __str__(self):
         return self.parameters.__str__() + '; ' + self.gflops
 
-
-def transformDimension(x, y, z):
+def transformDimension(x,y,z):
     if int(z) != 1:
         return 3
     elif int(y) != 1:
@@ -85,7 +80,6 @@ def transformDimension(x, y, z):
     elif int(x) != 1:
         return 1
 
-
 def executable(library):
     if type(library) != str:
         print 'ERROR: expected library name to be a string'
@@ -99,8 +93,7 @@ def executable(library):
         if sys.platform == 'win32':
             exe = 'Client.exe'
         elif sys.platform == 'linux2':
-            exe = "/usr/bin/clFFT-client"
-            # 'Client'
+            exe = 'Client'
     else:
         print 'ERROR: unknown library -- cannot determine executable name'
         quit()
@@ -112,17 +105,15 @@ def executable(library):
 
     return exe
 
-
 def max_mem_available_in_bytes(exe, device):
     arguments = [exe, '-i', device]
-
+    
     deviceInfo = subprocess.check_output(arguments, stderr=subprocess.STDOUT).split(os.linesep)
-    deviceInfo = itertools.ifilter(lambda x: x.count('MAX_MEM_ALLOC_SIZE'), deviceInfo)
+    deviceInfo = itertools.ifilter( lambda x: x.count('MAX_MEM_ALLOC_SIZE'), deviceInfo)
     deviceInfo = list(itertools.islice(deviceInfo, None))
     maxMemoryAvailable = re.search('\d+', deviceInfo[0])
     return int(maxMemoryAvailable.group(0))
 
-
 def max_problem_size(exe, layout, precision, device):
     if layout == 'ci' or layout == 'cp':
         numbers_in_one_datapoint = 2
@@ -142,26 +133,23 @@ def max_problem_size(exe, layout, precision, device):
     max_problem_size = max_problem_size / 16
     return max_problem_size
 
-
 def maxBatchSize(lengthx, lengthy, lengthz, layout, precision, exe, device):
     problemSize = int(lengthx) * int(lengthy) * int(lengthz)
     maxBatchSize = max_problem_size(exe, layout, precision, device) / problemSize
-    if int(lengthx) == pow(2, 16) or int(lengthx) == pow(2, 17):
+    if int(lengthx) == pow(2,16) or int(lengthx) == pow(2,17):
         # special cases in the kernel. extra padding is added in, so we need to shrink the batch size to accommodate
-        return str(maxBatchSize / 2)
+        return str(maxBatchSize/2)
     else:
         return str(maxBatchSize)
 
-
 def create_ini_file_if_requested(args):
     if args.createIniFilename:
         for x in vars(args):
-            if (type(getattr(args, x)) != file) and x.count('File') == 0:
+            if (type(getattr(args,x)) != file) and x.count('File') == 0:
                 args.createIniFilename.write('--' + x + os.linesep)
-                args.createIniFilename.write(str(getattr(args, x)) + os.linesep)
+                args.createIniFilename.write(str(getattr(args,x)) + os.linesep)
         quit()
-
-
+    
 def load_ini_file_if_requested(args, parser):
     if args.useIniFilename:
         argument_list = args.useIniFilename.readlines()
@@ -169,11 +157,9 @@ def load_ini_file_if_requested(args, parser):
         args = parser.parse_args(argument_list)
     return args
 
-
 def is_numeric_type(x):
     return type(x) == int or type(x) == long or type(x) == float
 
-
 def split_up_comma_delimited_lists(args):
     for x in vars(args):
         attr = getattr(args, x)
@@ -185,7 +171,6 @@ def split_up_comma_delimited_lists(args):
             setattr(args, x, attr.split(','))
     return args
 
-
 class Range:
     def __init__(self, ranges, defaultStep='+1'):
         # we might be passed in a single value or a list of strings
@@ -203,7 +188,7 @@ class Range:
                 elif thisRange == 'max':
                     self.expanded = self.expanded + ['max']
                 else:
-                # elif thisRange != 'max':
+                #elif thisRange != 'max':
                     if thisRange.count(':'):
                         self._stepAmount = thisRange.split(':')[1]
                     else:
@@ -246,11 +231,9 @@ class Range:
     def _add(self):
         self.current = self.current + self._stepAmount
 
-
 def expand_range(a_range):
     return Range(a_range).expanded
 
-
 def decode_parameter_problemsize(problemsize):
     if not problemsize.count(None):
         i = 0
@@ -259,16 +242,14 @@ def decode_parameter_problemsize(problemsize):
             j = 0
             while j < len(problemsize[i]):
                 problemsize[i][j] = problemsize[i][j].split('x')
-                j = j + 1
-            i = i + 1
+                j = j+1
+            i = i+1
 
     return problemsize
 
-
 def gemm_table_header():
     return 'm,n,k,lda,ldb,ldc,alpha,beta,order,transa,transb,function,device,library,label,GFLOPS'
 
-
 class GemmTestCombination:
     def __init__(self,
                  sizem, sizen, sizek, lda, ldb, ldc,
@@ -293,7 +274,6 @@ class GemmTestCombination:
     def __str__(self):
         return self.sizem + 'x' + self.sizen + 'x' + self.sizek + ':' + self.lda + 'x' + self.ldb + 'x' + self.ldc + ', ' + self.device + ', ' + self.function + ', ' + self.library + ', alpha(' + self.alpha + '), beta(' + self.beta + '), order(' + self.order + '), transa(' + self.transa + '), transb(' + self.transb + ') -- ' + self.label
 
-
 class GemmGraphPoint:
     def __init__(self,
                  sizem, sizen, sizek,
@@ -320,17 +300,16 @@ class GemmGraphPoint:
         # ALL members must be represented here (x, y, z, batch, device, label, etc)
         return self.sizem + 'x' + self.sizen + 'x' + self.sizek + ':' + self.device + ', ' + self.function + ', ' + self.library + ', order(' + self.order + '), transa(' + self.transa + '), transb(' + self.transb + ') -- ' + self.label + '; ' + self.gflops + ' gflops'
 
-
-def open_file(filename):
+def open_file( filename ):
     if type(filename) == list:
         filename = filename[0]
     if filename == None:
-        filename = 'results' + datetime.now().isoformat().replace(':', '.') + '.txt'
+        filename = 'results' + datetime.now().isoformat().replace(':','.') + '.txt'
     else:
         if os.path.isfile(filename):
             oldname = filename
-            filename = filename + datetime.now().isoformat().replace(':', '.')
+            filename = filename + datetime.now().isoformat().replace(':','.')
             message = 'A file with the name ' + oldname + ' already exists. Changing filename to ' + filename
             print message
-
+    
     return open(filename, 'w')
diff --git a/src/scripts/perf/measurePerformance.py b/src/scripts/perf/measurePerformance.py
index d754a68..c0cbc6a 100644
--- a/src/scripts/perf/measurePerformance.py
+++ b/src/scripts/perf/measurePerformance.py
@@ -1,13 +1,12 @@
-#!/usr/bin/env python2
 # ########################################################################
 # Copyright 2013 Advanced Micro Devices, Inc.
-#
+# 
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at
-#
+# 
 # http://www.apache.org/licenses/LICENSE-2.0
-#
+# 
 # Unless required by applicable law or agreed to in writing, software
 # distributed under the License is distributed on an "AS IS" BASIS,
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -19,7 +18,7 @@ import sys
 import argparse
 import subprocess
 import itertools
-import re  # gex
+import re#gex
 import os
 from threading import Timer, Thread
 import thread, time
@@ -32,8 +31,8 @@ from fftPerformanceTesting import *
 from performanceUtility import timeout, log, generate235Radices
 
 IAM = 'FFT'
-TIMOUT_VAL = 900  # In seconds
-
+TIMOUT_VAL = 900  #In seconds
+   
 devicevalues = ['gpu', 'cpu']
 layoutvalues = ['cp', 'ci']
 placevalues = ['in', 'out']
@@ -95,39 +94,39 @@ args = parser.parse_args()
 
 label = str(args.label)
 
-subprocess.call('mkdir perfLog', shell=True)
-logfile = os.path.join('perfLog', (label + '-' + 'fftMeasurePerfLog.txt'))
+subprocess.call('mkdir perfLog', shell = True)
+logfile = os.path.join('perfLog', (label+'-'+'fftMeasurePerfLog.txt'))
 
 def printLog(txt):
     print txt
     log(logfile, txt)
 
 printLog("=========================MEASURE PERFORMANCE START===========================")
-printLog("Process id of Measure Performance:" + str(os.getpid()))
+printLog("Process id of Measure Performance:"+str(os.getpid()))
 
 currCommandProcess = None
 
 
-printLog('Executing measure performance for label: ' + str(label))
+printLog('Executing measure performance for label: '+str(label))
 
 
-# This function is defunct now
- at timeout(1, "fileName")  # timeout is 5 minutes, 5*60 = 300 secs
+#This function is defunct now
+ at timeout(1, "fileName") # timeout is 5 minutes, 5*60 = 300 secs
 def checkTimeOutPut2(args):
     global currCommandProcess
-    # ret = subprocess.check_output(args, stderr=subprocess.STDOUT)
-    # return ret
+    #ret = subprocess.check_output(args, stderr=subprocess.STDOUT)
+    #return ret
     currCommandProcess = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-    printLog("Curr Command Process id = " + str(currCommandProcess.pid))
-    ret = currCommandProcess.communicate()
+    printLog("Curr Command Process id = "+str(currCommandProcess.pid))
+    ret = currCommandProcess.communicate()    
     if(ret[0] == None or ret[0] == ''):
         errCode = currCommandProcess.poll()
         raise subprocess.CalledProcessError(errCode, args, output=ret[1])
     return ret[0]
 
 
-# Spawns a separate thread to execute the library command and wait for that thread to complete
-# This wait is of 900 seconds (15 minutes). If still the thread is alive then we kill the thread
+#Spawns a separate thread to execute the library command and wait for that thread to complete
+#This wait is of 900 seconds (15 minutes). If still the thread is alive then we kill the thread
 def checkTimeOutPut(args):
     t = None
     global currCommandProcess
@@ -141,48 +140,51 @@ def checkTimeOutPut(args):
         global stde
         try:
             stdo, stde = currCommandProcess.communicate()
-            printLog('stdout:\n' + str(stdo))
-            printLog('stderr:\n' + str(stde))
+            printLog('stdout:\n'+str(stdo))
+            printLog('stderr:\n'+str(stde))
         except:
             printLog("ERROR: UNKNOWN Exception - +checkWinTimeOutPut()::executeCommand()")
 
     currCommandProcess = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
     thread = Thread(target=executeCommand)
     thread.start()
-    thread.join(TIMOUT_VAL)  # wait for the thread to complete
+    thread.join(TIMOUT_VAL) #wait for the thread to complete 
     if thread.is_alive():
         printLog('ERROR: Killing the process - terminating thread because it is taking too much of time to execute')
         currCommandProcess.kill()
         printLog('ERROR: Timed out exception')
         raise errorHandler.ApplicationException(__file__, errorHandler.TIME_OUT)
-    if stdo == "" or stdo == None:
+    if stdo == "" or stdo==None:
         errCode = currCommandProcess.poll()
         printLog('ERROR: @@@@@Raising Called processor exception')
         raise subprocess.CalledProcessError(errCode, args, output=stde)
     return stdo
 
 
+
+
+
 # don't try to create and use an .ini file at the same time (it will open a portal through which demons will emerge)
 if args.iniFilename and args.createIniFilename:
     printLog('ERROR: --ini and --createini are mutually exclusive. Please choose only one.')
     quit()
 
-# read in .ini parameters if --ini is used
+#read in .ini parameters if --ini is used
 if args.iniFilename != None:
     if not os.path.isfile(args.iniFilename):
         printLog("No file with the name \'{}\' exists. Please indicate another filename.".format(args.iniFilename))
         quit()
-
+    
     ini = open(args.iniFilename, 'r')
     iniContents = ini.read()
     iniContents = iniContents.split(';')
-    for i in range(0, len(iniContents)):
+    for i in range(0,len(iniContents)):
         line = iniContents.pop()
         line = line.partition(' ')
         parameter = line[0]
         value = line[2]
-        value = value.replace('\'', '').replace('[', '').replace(']', '').replace(' ', '')
-
+        value = value.replace('\'','').replace('[','').replace(']','').replace(' ','')
+        
         if parameter == 'batchSize':
             args.batchSize = value
         elif parameter == 'constProbSize':
@@ -209,13 +211,13 @@ if args.iniFilename != None:
             printLog('{} corrupted. Please re-create a .ini file with the --createini flag.'.format(args.iniFilename))
             quit()
 
-# create ini file if requested
+#create ini file if requested
 if args.createIniFilename != None:
     printLog('Creating Ini files')
     if os.path.isfile(args.createIniFilename):
         printLog('A file with the name \'{}\' already exists. Please delete the file or choose another name.'.format(args.createIniFilename))
         quit()
-    printLog('Creating Ini file:' + args.createIniFilename + '\n')
+    printLog('Creating Ini file:'+args.createIniFilename+'\n')
     ini = open(args.createIniFilename, 'w')
     ini.write('batchSize {} ;'.format(args.batchSize))
     ini.write('constProbSize {} ;'.format(args.constProbSize))
@@ -228,16 +230,16 @@ if args.createIniFilename != None:
     ini.write('outputlayout {} ;'.format(args.outputlayout))
     ini.write('placeness {} ;'.format(args.placeness))
     ini.write('precision {} ;'.format(args.precision))
-    printLog('Created Ini file:' + args.createIniFilename + '\n')
+    printLog('Created Ini file:'+args.createIniFilename+'\n')
     printLog("=========================MEASURE PERFORMANCE START===========================\n")
     quit()
 
 
-# turn pow10 into its range list
+#turn pow10 into its range list
 if args.batchSize.count('pow10'):
     args.batchSize = pow10
 
-# split up comma-delimited lists
+#split up comma-delimited lists
 args.batchSize = args.batchSize.split(',')
 args.constProbSize = int(args.constProbSize.split(',')[0])
 args.device = args.device.split(',')
@@ -252,12 +254,13 @@ args.placeness = args.placeness.split(',')
 args.precision = args.precision.split(',')
 
 
-printLog('Executing for label: ' + str(args.label))
-# check parameters for sanity
+
+printLog('Executing for label: '+str(args.label))
+#check parameters for sanity
 
 # batchSize of 'max' must not be in a list (does not get on well with others)
-# if args.batchSize.count('max') and len(args.batchSize) > 1:
-if (args.batchSize.count('max') or args.batchSize.count('adapt'))and len(args.batchSize) > 1:
+#if args.batchSize.count('max') and len(args.batchSize) > 1:
+if ( args.batchSize.count('max') or args.batchSize.count('adapt') )and len(args.batchSize) > 1:
     printLog('ERROR: --batchsize max must not be in a comma delimited list')
     quit()
 
@@ -280,48 +283,44 @@ def isPrime(n):
     n = abs(n)
     i = 2
     while i <= math.sqrt(n):
-        if n % i == 0:
+        if n%i == 0:
             return False
         i += 1
     return True
 
-
 def findFactors(number):
-    iter_space = range(1, number + 1)
+    iter_space = range(1, number+1)
     prime_factor_list = []
     for curr_iter in iter_space:
         if isPrime(curr_iter) == True:
-            # print 'curr_iter_prime: ', curr_iter
-            if number % curr_iter == 0:
+            #print 'curr_iter_prime: ', curr_iter
+            if number%curr_iter == 0:
                 prime_factor_list.append(curr_iter)
     return prime_factor_list
 
 
+#Type : Function
+#Input: num, a number which we need to factorize
+#Return Type: list
+#Details: This function returns only the prime factors on an input number
+#         e.g: input: 20, returns: [2,2,5]
+#              input: 32, returns: [2,2,2,2,2]
 def factor(num):
-    """
-    This function returns only the prime factors on an input number
-        e.g: input: 20, returns: [2,2,5]
-            input: 32, returns: [2,2,2,2,2]
-
-    Type : Function
-    Input: num, a number which we need to factorize
-    Return Type: list
-    """
     if num == 1:
         return [1]
     i = 2
-    limit = num ** 0.5
+    limit = num**0.5
     while i <= limit:
         if num % i == 0:
-            ret = factor(num / i)
+            ret = factor(num/i)
             ret.append(i)
             return ret
         i += 1
     return [num]
 
 def validateFactors(flist):
-    ref_list = [1, 2, 3, 5]
-    if flist == ref_list:
+    ref_list = [1,2,3,5]
+    if flist==ref_list:
         return True
     if len(flist) > len(ref_list):
         return False
@@ -330,24 +329,23 @@ def validateFactors(flist):
             return False
     return True
 
+#Type : Function
+#Input: num, a number which we need to validate for 1,2,3 or 5 factors
+#Return Type: boolean
+#Details: This function validates an input number for its prime factors
+#         If factors has number other than 1,2,3 or 5 then return false else return true
+#         e.g: input: 20, returns: True
+#              input: 28, returns: False
 def validate_number_for_1235(num):
-    """This function validates an input number for its prime factors
-    If factors has number other than 1,2,3 or 5 then return false else return true
-    e.g: input: 20, returns: True
-         input: 28, returns: False
-
-    Input: num, a number which we need to validate for 1,2,3 or 5 factors
-    Return Type: boolean
-    """
     if num == 0:
         return True
-    set1235 = set([1, 2, 3, 5])
+    set1235 = set([1,2,3,5])
     setPrimeFactors = set(factor(num))
-    setPrimeFactors = setPrimeFactors | set1235  # performed union of two sets
+    setPrimeFactors = setPrimeFactors | set1235 #performed union of two sets
     #if still the sets are same then we are done!!!
-    # else we got few factors other than 1,2,3 or 5 and we should invalidate
-    # the input number
-    if setPrimeFactors == set1235:
+    #else we got few factors other than 1,2,3 or 5 and we should invalidate
+    #the input number
+    if setPrimeFactors ==  set1235:
         return True
     return False
 
@@ -360,33 +358,33 @@ def getValidNumbersInRange(rlist):
             valid_number_list.append(relement)
     return valid_number_list
 
-
 def get_next_num_with_1235_factors(start):
-    start += 1
+    start+=1
     while not validateFactors(findFactors(start)):
-        start += 1
+        start+=1
     return start
 
 
 def check_number_for_1235_factors(number):
-    # printLog('number:'+ number)
+    #printLog('number:'+ number)
     factors = findFactors(number)
-    # printLog('factors:'+ factors)
+    #printLog('factors:'+ factors)
     if not validateFactors(factors):
         printLog("ERROR: --{0} must have only 1,2,3,5 as factors")
         return False
     return True
 
 
+
 def check_for_1235_factors(values, option):
-    # print 'values: ', values
+    #print 'values: ', values
     for n in values:
-        for m in n.replace('-', ',').split(','):
+        for m in n.replace('-',',').split(','):
             if not validate_number_for_1235(int(m)):
                 print 'ERROR: --{0} must specify number with only 1,2,3,5 as factors'.format(option)
                 quit()
-            # print 'Valid number for :',option,':', m
-
+            #print 'Valid number for :',option,':', m
+       
 
 if args.library == 'clFFT':
     check_for_1235_factors(args.lengthx, 'lengthx')
@@ -394,6 +392,7 @@ if args.library == 'clFFT':
     check_for_1235_factors(args.lengthz, 'lengthz')
 
 
+
 if not os.path.isfile(executable(args.library)):
     printLog("ERROR: Could not find client named {0}".format(executable(args.library)))
     quit()
@@ -405,10 +404,9 @@ def get235RadicesNumberInRange(minimum, maximum):
     numbers = generate235Radices(maximum)
     minIndex = numbers.index(minimum)
     maxIndex = numbers.index(maximum)
-    return numbers[minIndex:maxIndex + 1]
-
-
-# expand ranges
+    return numbers[minIndex:maxIndex+1]
+   
+#expand ranges
 class Range:
     def __init__(self, ranges, defaultStep='+1'):
         self.expanded = []
@@ -479,24 +477,25 @@ args.lengthy = Range(args.lengthy, 'l').expanded
 args.lengthz = Range(args.lengthz, 'l').expanded
 
 
-# expand problemsizes ('XxYxZ:batch')
-# print "args.problemsize--1-->", args.problemsize
+
+#expand problemsizes ('XxYxZ:batch')
+#print "args.problemsize--1-->", args.problemsize
 if args.problemsize and args.problemsize[0] != 'None':
     i = 0
     while i < len(args.problemsize):
         args.problemsize[i] = args.problemsize[i].split(':')
         args.problemsize[i][0] = args.problemsize[i][0].split('x')
-        i = i + 1
+        i = i+1
 
 
-# create the problem size combinations for each run of the client
+#create the problem size combinations for each run of the client
 problem_size_combinations = itertools.product(args.lengthx, args.lengthy, args.lengthz, args.batchSize)
 
 problem_size_combinations = list(itertools.islice(problem_size_combinations, None))
 
-# print "args.problemsize--2-->", args.problemsize
+#print "args.problemsize--2-->", args.problemsize
 
-# add manually entered problem sizes to the list of FFTs to crank out
+#add manually entered problem sizes to the list of FFTs to crank out
 manual_test_combinations = []
 
 if args.problemsize and args.problemsize[0] != 'None':
@@ -505,24 +504,24 @@ if args.problemsize and args.problemsize[0] != 'None':
         y = []
         z = []
         batch = []
-
+    
         x.append(int(n[0][0]))
-
+    
         if len(n[0]) >= 2:
             y.append(int(n[0][1]))
         else:
             y.append(1)
-
+    
         if len(n[0]) >= 3:
             z.append(int(n[0][2]))
         else:
             z.append(1)
-
+    
         if len(n) > 1:
             batch.append(int(n[1]))
         else:
             batch.append(1)
-
+    
         combos = itertools.product(x, y, z, batch)
         combos = list(itertools.islice(combos, None))
         for n in combos:
@@ -532,29 +531,29 @@ if args.problemsize and args.problemsize[0] != 'None':
 
 problem_size_combinations = problem_size_combinations + manual_test_combinations
 
-# create final list of all transformations (with problem sizes and transform properties)
+#create final list of all transformations (with problem sizes and transform properties)
 test_combinations = itertools.product(problem_size_combinations, args.device, args.inputlayout, args.outputlayout, args.placeness, args.precision)
 test_combinations = list(itertools.islice(test_combinations, None))
 test_combinations = [TestCombination(params[0][0], params[0][1], params[0][2], params[0][3], params[1], params[2], params[3], params[4], params[5], args.label) for params in test_combinations]
 
 
-# turn each test combination into a command, run the command, and then stash the gflops
-result = []  # this is where we'll store the results for the table
+#turn each test combination into a command, run the command, and then stash the gflops
+result = [] # this is where we'll store the results for the table
 
 
-# open output file and write the header
+#open output file and write the header
 
 if args.tableOutputFilename == None:
-   args.tableOutputFilename = 'results' + datetime.now().isoformat().replace(':', '.') + '.txt'
+   args.tableOutputFilename = 'results' + datetime.now().isoformat().replace(':','.') + '.txt'
 else:
    if os.path.isfile(args.tableOutputFilename):
        oldname = args.tableOutputFilename
-       args.tableOutputFilename = args.tableOutputFilename + datetime.now().isoformat().replace(':', '.')
+       args.tableOutputFilename = args.tableOutputFilename + datetime.now().isoformat().replace(':','.')
        message = 'A file with the name ' + oldname + ' already exists. Changing filename to ' + args.tableOutputFilename
        printLog(message)
 
 
-printLog('table header---->' + str(tableHeader))
+printLog('table header---->'+ str(tableHeader))
 
 table = open(args.tableOutputFilename, 'w')
 table.write(tableHeader + '\n')
@@ -565,23 +564,23 @@ if args.constProbSize == -1:
 args.constProbSize = int(args.constProbSize)
 
 
-printLog('Total combinations =  ' + str(len(test_combinations)))
+printLog('Total combinations =  '+str(len(test_combinations)))
 
 vi = 0
-# test_combinations = test_combinations[825:830]
+#test_combinations = test_combinations[825:830]
 for params in test_combinations:
-    vi = vi + 1
+    vi = vi+1
     printLog("")
-    printLog('preparing command: ' + str(vi))
+    printLog('preparing command: '+ str(vi))    
     device = params.device
     lengthx = str(params.x)
     lengthy = str(params.y)
     lengthz = str(params.z)
-
+    
     if params.batchsize == 'max':
         batchSize = maxBatchSize(lengthx, lengthy, lengthz, params.inlayout, params.precision, executable(args.library), '--' + device)
     elif params.batchsize == 'adapt':
-        batchSize = str(args.constProbSize / (int(lengthx) * int(lengthy) * int(lengthz)))
+        batchSize = str(args.constProbSize/(int(lengthx)*int(lengthy)*int(lengthz)))
     else:
         batchSize = str(params.batchsize)
 
@@ -614,7 +613,7 @@ for params in test_combinations:
         printLog('ERROR: invalid value for precision when assembling client command')
 
 
-    # set up arguments here
+    #set up arguments here
     if args.library == 'clFFT':
         arguments = [executable(args.library),
                      '--' + device,
@@ -627,17 +626,17 @@ for params in test_combinations:
                      placeness,
                      precision,
                      '-p', '10']
-
+   
     writeline = True
     try:
-        printLog('Executing Command: ' + str(arguments))
+        printLog('Executing Command: '+str(arguments))
         output = checkTimeOutPut(arguments)
         output = output.split(os.linesep);
         printLog('Execution Successfull---------------\n')
 
     except errorHandler.ApplicationException as ae:
         writeline = False
-        printLog('ERROR: Command is taking too much of time ' + ae.message + '\n' + 'Command: \n' + str(arguments))
+        printLog('ERROR: Command is taking too much of time '+ae.message+'\n'+'Command: \n'+str(arguments))
         continue
     except subprocess.CalledProcessError as clientCrash:
         print 'Command execution failure--->'
@@ -646,7 +645,7 @@ for params in test_combinations:
             printLog('Omitting line from table - problem is too large')
         else:
             writeline = False
-            printLog('ERROR: client crash. Please report the following error message (with \'CLFFT_*\' error code, if given, and the parameters used to invoke measurePerformance.py) \n' + clientCrash.output + '\n')
+            printLog('ERROR: client crash. Please report the following error message (with \'CLFFT_*\' error code, if given, and the parameters used to invoke measurePerformance.py) \n'+clientCrash.output+'\n')
             printLog('IN ORIGINAL WE CALL QUIT HERE - 1\n')
             continue
 
@@ -657,7 +656,7 @@ for params in test_combinations:
 
     if writeline:
         try:
-            output = itertools.ifilter(lambda x: x.count('Gflops'), output)
+            output = itertools.ifilter( lambda x: x.count('Gflops'), output)
             output = list(itertools.islice(output, None))
             thisResult = re.search('\d+\.*\d*e*-*\d*$', output[-1])
             thisResult = float(thisResult.group(0))
@@ -674,31 +673,31 @@ for params in test_combinations:
     else:
         if(len(output) > 0):
             if output[0].find('nan') or output[0].find('inf'):
-                printLog('WARNING: output from client was funky for this run. skipping table row')
+                printLog( 'WARNING: output from client was funky for this run. skipping table row')
             else:
                 prinLog('ERROR: output from client makes no sense')
                 printLog(str(output[0]))
                 printLog('IN ORIGINAL WE CALL QUIT HERE - 2\n')
         else:
             prinLog('ERROR: output from client makes no sense')
-            # quit()
+            #quit()
 printLog("=========================MEASURE PERFORMANCE ENDS===========================\n")
 #
-# """
-# print a pretty table
-# """
-# if args.tableOutputFilename == None:
+#"""
+#print a pretty table
+#"""
+#if args.tableOutputFilename == None:
 #   args.tableOutputFilename = 'results' + datetime.now().isoformat().replace(':','.') + '.txt'
-# else:
+#else:
 #   if os.path.isfile(args.tableOutputFilename):
 #       oldname = args.tableOutputFilename
 #       args.tableOutputFilename = args.tableOutputFilename + datetime.now().isoformat().replace(':','.')
 #       message = 'A file with the name ' + oldname + ' already exists. Changing filename to ' + args.tableOutputFilename
 #       print message
 #
-# table = open(args.tableOutputFilename, 'w')
-# table.write(tableHeader + '\n')
-# for x in result:
+#table = open(args.tableOutputFilename, 'w')
+#table.write(tableHeader + '\n')
+#for x in result:
 #   row = ''
 #   for y in x:
 #       row = row + str(y) + ','
diff --git a/src/scripts/perf/performanceUtility.py b/src/scripts/perf/performanceUtility.py
index 379cbcf..e3c7626 100644
--- a/src/scripts/perf/performanceUtility.py
+++ b/src/scripts/perf/performanceUtility.py
@@ -1,13 +1,12 @@
-#!/usr/bin/env python2
 # ########################################################################
 # Copyright 2013 Advanced Micro Devices, Inc.
-#
+# 
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at
-#
+# 
 # http://www.apache.org/licenses/LICENSE-2.0
-#
+# 
 # Unless required by applicable law or agreed to in writing, software
 # distributed under the License is distributed on an "AS IS" BASIS,
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -15,8 +14,8 @@
 # limitations under the License.
 # ########################################################################
 
-# This file contains a number of utilities function which could be independent of
-# any specific domain concept
+#This file contains a number of utilities function which could be independent of
+#any specific domain concept
 
 import signal
 from subprocess import check_output
@@ -25,12 +24,12 @@ from datetime import datetime
 
 def currentUser():
     try:
-        return check_output("who", shell=True).split()[0];
+        return check_output("who", shell = True).split()[0];
     except:
         print 'Unhandled Exception at performanceUtility::currentUser()'
         raise
-
-# Details: Generate sorted numbers in radices of 2,3 and 5 upto a given upper limit number
+    
+#Details: Generate sorted numbers in radices of 2,3 and 5 upto a given upper limit number
 def generate235Radices(maxSize):
     sizeList = list()
     i = 0
@@ -47,15 +46,15 @@ def generate235Radices(maxSize):
             sumk = 1
             k = 0
             while(True):
-                SUM = sumi * sumj * sumk
-                if (SUM > maxSize): break
+                SUM = sumi*sumj*sumk
+                if ( SUM > maxSize ): break
                 sizeList.append(SUM)
                 k += 1
                 sumk *= 2
             if (k == 0): break
             j += 1
             sumj *= 3
-        if (j == 0 and k == 0): break
+        if ( j == 0 and k == 0): break
         i += 1
         sumi *= 5
     sizeList.sort()
@@ -67,11 +66,11 @@ def timeout(timeout_time, default):
         def f2(args):
             def timeout_handler(signum, frame):
                 raise errorHandler.TimeoutException()
-
-            old_handler = signal.signal(signal.SIGALRM, timeout_handler)
-            signal.alarm(timeout_time)  # triger alarm in timeout_time seconds
+ 
+            old_handler = signal.signal(signal.SIGALRM, timeout_handler) 
+            signal.alarm(timeout_time) # triger alarm in timeout_time seconds
             retval = ""
-            try:
+            try: 
                 retval = f(args)
             except errorHandler.TimeoutException:
                 raise errorHandler.ApplicationException(__file__, errorHandler.TIME_OUT)
@@ -79,8 +78,8 @@ def timeout(timeout_time, default):
                 signal.alarm(0)
                 raise
             finally:
-                # print 'executing finally'
-                signal.signal(signal.SIGALRM, old_handler)
+                #print 'executing finally'
+                signal.signal(signal.SIGALRM, old_handler) 
             signal.alarm(0)
             return retval
         return f2
@@ -88,10 +87,11 @@ def timeout(timeout_time, default):
 
 
 def logTxtOutput(fileName, mode, txt):
-    todayFile = fileName + '-' + datetime.now().strftime('%Y-%b-%d') + '.txt'
+    todayFile =  fileName+'-'+datetime.now().strftime('%Y-%b-%d')+'.txt'
     with open(todayFile, mode) as f:
-        f.write('------\n' + txt + '\n')
-
+        f.write('------\n'+txt+'\n')
+        
 def log(filename, txt):
     with open(filename, 'a') as f:
-        f.write(datetime.now().ctime() + '# ' + txt + '\n')
+        f.write(datetime.now().ctime()+'# '+txt+'\n')
+        
\ No newline at end of file
diff --git a/src/scripts/perf/plotPerformance.py b/src/scripts/perf/plotPerformance.py
index dd2a516..3976512 100644
--- a/src/scripts/perf/plotPerformance.py
+++ b/src/scripts/perf/plotPerformance.py
@@ -1,13 +1,12 @@
-#!/usr/bin/env python2
 # ########################################################################
 # Copyright 2013 Advanced Micro Devices, Inc.
-#
+# 
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at
-#
+# 
 # http://www.apache.org/licenses/LICENSE-2.0
-#
+# 
 # Unless required by applicable law or agreed to in writing, software
 # distributed under the License is distributed on an "AS IS" BASIS,
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -38,207 +37,207 @@ from matplotlib.backends.backend_pdf import PdfPages
 from fftPerformanceTesting import *
 
 def plotGraph(dataForAllPlots, title, plottype, plotkwargs, xaxislabel, yaxislabel):
-    """
-      display a pretty graph
-      """
-    dh.write('Making graph\n')
-    colors = ['k', 'y', 'm', 'c', 'r', 'b', 'g']
-    # plottype = 'plot'
-    for thisPlot in dataForAllPlots:
-      getattr(pylab, plottype)(thisPlot.xdata, thisPlot.ydata,
-                               '{}.-'.format(colors.pop()),
-                               label=thisPlot.label, **plotkwargs)
-    if len(dataForAllPlots) > 1:
-      pylab.legend(loc='best')
-
-    pylab.title(title)
-    pylab.xlabel(xaxislabel)
-    pylab.ylabel(yaxislabel)
-    pylab.grid(True)
-
-    if args.outputFilename == None:
-      # if no pdf output is requested, spit the graph to the screen . . .
-      pylab.show()
-    else:
-      pylab.savefig(args.outputFilename, dpi=(1024 / 8))
-      # . . . otherwise, gimme gimme pdf
-      # pdf = PdfPages(args.outputFilename)
-      # pdf.savefig()
-      # pdf.close()
+  """
+  display a pretty graph
+  """
+  dh.write('Making graph\n')
+  colors = ['k','y','m','c','r','b','g']
+  #plottype = 'plot'
+  for thisPlot in dataForAllPlots:
+    getattr(pylab, plottype)(thisPlot.xdata, thisPlot.ydata,
+                             '{}.-'.format(colors.pop()), 
+                             label=thisPlot.label, **plotkwargs)
+  if len(dataForAllPlots) > 1:
+    pylab.legend(loc='best')
+  
+  pylab.title(title)
+  pylab.xlabel(xaxislabel)
+  pylab.ylabel(yaxislabel)
+  pylab.grid(True)
+  
+  if args.outputFilename == None:
+    # if no pdf output is requested, spit the graph to the screen . . .
+    pylab.show()
+  else:
+    pylab.savefig(args.outputFilename,dpi=(1024/8))
+    # . . . otherwise, gimme gimme pdf
+    #pdf = PdfPages(args.outputFilename)
+    #pdf.savefig()
+    #pdf.close()
 
 ######## plotFromDataFile() Function to plot from data file begins ########
 def plotFromDataFile():
-    data = []
-    """
-    read in table(s) from file(s)
-    """
-    for thisFile in args.datafile:
-        if not os.path.isfile(thisFile):
-            print 'No file with the name \'{}\' exists. Please indicate another filename.'.format(thisFile)
-            quit()
-
-        results = open(thisFile, 'r')
-        resultsContents = results.read()
-        resultsContents = resultsContents.rstrip().split('\n')
-
-        firstRow = resultsContents.pop(0)
-        if firstRow != tableHeader:
-            print 'ERROR: input file \'{}\' does not match expected format.'.format(thisFile)
-            quit()
-
-        for row in resultsContents:
-            row = row.split(',')
-            row = TableRow(TestCombination(row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9]), row[10])
-            data.append(GraphPoint(row.parameters.x, row.parameters.y, row.parameters.z, row.parameters.batchsize, row.parameters.precision, row.parameters.device, row.parameters.label, row.gflops))
-
-    """
-    data sanity check
-    """
-    # if multiple plotvalues have > 1 value among the data rows, the user must specify which to plot
-    multiplePlotValues = []
-    for option in plotvalues:
+  data = []
+  """
+  read in table(s) from file(s)
+  """
+  for thisFile in args.datafile:
+    if not os.path.isfile(thisFile):
+      print 'No file with the name \'{}\' exists. Please indicate another filename.'.format(thisFile)
+      quit()
+  
+    results = open(thisFile, 'r')
+    resultsContents = results.read()
+    resultsContents = resultsContents.rstrip().split('\n')
+  
+    firstRow = resultsContents.pop(0)
+    if firstRow != tableHeader:
+      print 'ERROR: input file \'{}\' does not match expected format.'.format(thisFile)
+      quit()
+  
+    for row in resultsContents:
+      row = row.split(',')
+      row = TableRow(TestCombination(row[0],row[1],row[2],row[3],row[4],row[5],row[6],row[7],row[8],row[9]), row[10])
+      data.append(GraphPoint(row.parameters.x, row.parameters.y, row.parameters.z, row.parameters.batchsize, row.parameters.precision, row.parameters.device, row.parameters.label, row.gflops))
+  
+  """
+  data sanity check
+  """
+  # if multiple plotvalues have > 1 value among the data rows, the user must specify which to plot
+  multiplePlotValues = []
+  for option in plotvalues:
+    values = []
+    for point in data:
+      values.append(getattr(point, option)) 
+    multiplePlotValues.append(len(set(values)) > 1)
+  if multiplePlotValues.count(True) > 1 and args.plot == None:
+    print 'ERROR: more than one parameter of {} has multiple values. Please specify which parameter to plot with --plot'.format(plotvalues)
+    quit()
+  
+  # if args.graphxaxis is not 'problemsize', the user should know that the results might be strange
+  if args.graphxaxis != 'problemsize':
+    xaxisvalueSet = []
+    for option in xaxisvalues:
+      if option != 'problemsize':
         values = []
         for point in data:
-            values.append(getattr(point, option))
-        multiplePlotValues.append(len(set(values)) > 1)
-    if multiplePlotValues.count(True) > 1 and args.plot == None:
-        print 'ERROR: more than one parameter of {} has multiple values. Please specify which parameter to plot with --plot'.format(plotvalues)
-        quit()
-
-    # if args.graphxaxis is not 'problemsize', the user should know that the results might be strange
-    if args.graphxaxis != 'problemsize':
-        xaxisvalueSet = []
-        for option in xaxisvalues:
-            if option != 'problemsize':
-                values = []
-                for point in data:
-                    values.append(getattr(point, option))
-                xaxisvalueSet.append(len(set(values)) > 1)
-        if xaxisvalueSet.count(True) > 1:
-          print 'WARNING: more than one parameter of {} is varied. unexpected results may occur. please double check your graphs for accuracy.'.format(xaxisvalues)
-
-    # multiple rows should not have the same input values
-    pointInputs = []
-    for point in data:
-        pointInputs.append(point.__str__().split(';')[0])
-    if len(set(pointInputs)) != len(data):
-        print 'ERROR: imported table has duplicate rows with identical input parameters'
-        quit()
-
-    """
-    figure out if we have multiple plots on this graph (and what they should be)
-    """
-    if args.plot != None:
-        multiplePlots = args.plot
-    elif multiplePlotValues.count(True) == 1:
-        multiplePlots = plotvalues[multiplePlotValues.index(True)]
-    else:
-        # default to device if none of the options to plot have multiple values
-        multiplePlots = 'device'
-
-    """
-    assemble data for the graphs
-    """
-    data.sort(key=lambda row: int(getattr(row, args.graphxaxis)))
-
-    # choose scale for x axis
-    if args.xaxisscale == None:
-        # user didn't specify. autodetect
-        if int(getattr(data[len(data) - 1], args.graphxaxis)) > 2000:  # big numbers on x-axis
-            args.xaxisscale = 'log2'
-        elif int(getattr(data[len(data) - 1], args.graphxaxis)) > 10000:  # bigger numbers on x-axis
-            args.xaxisscale = 'log10'
-        else:  # small numbers on x-axis
-            args.xaxisscale = 'linear'
-
-    if args.xaxisscale == 'linear':
-        plotkwargs = {}
-        plottype = 'plot'
-    elif args.xaxisscale == 'log2':
-        plottype = 'semilogx'
-        plotkwargs = {'basex':2}
-    elif args.xaxisscale == 'log10':
-        plottype = 'semilogx'
-        plotkwargs = {'basex':10}
-    else:
-      print 'ERROR: invalid value for x-axis scale'
-      quit()
-
-    plots = set(getattr(row, multiplePlots) for row in data)
-
-    class DataForOnePlot:
-        def __init__(self, inlabel, inxdata, inydata):
-            self.label = inlabel
-            self.xdata = inxdata
-            self.ydata = inydata
-
-    dataForAllPlots = []
-    for plot in plots:
-        dataForThisPlot = itertools.ifilter(lambda x: getattr(x, multiplePlots) == plot, data)
-        dataForThisPlot = list(itertools.islice(dataForThisPlot, None))
-        if args.graphxaxis == 'problemsize':
-            xdata = [int(row.x) * int(row.y) * int(row.z) * int(row.batchsize) for row in dataForThisPlot]
-        else:
-            xdata = [getattr(row, args.graphxaxis) for row in dataForThisPlot]
-        ydata = [getattr(row, args.graphyaxis) for row in dataForThisPlot]
-        dataForAllPlots.append(DataForOnePlot(plot, xdata, ydata))
-
-    """
-    assemble labels for the graph or use the user-specified ones
-    """
-    if args.graphtitle:
-      # use the user selection
-      title = args.graphtitle
-    else:
-      # autogen a lovely title
-      title = 'Performance vs. ' + args.graphxaxis.capitalize()
-
-    if args.xaxislabel:
-      # use the user selection
-      xaxislabel = args.xaxislabel
-    else:
-      # autogen a lovely x-axis label
-      if args.graphxaxis == 'cachesize':
-        units = '(bytes)'
-      else:
-        units = '(datapoints)'
-
-      xaxislabel = args.graphxaxis + ' ' + units
-
-    if args.yaxislabel:
-      # use the user selection
-      yaxislabel = args.yaxislabel
+          values.append(getattr(point, option)) 
+        xaxisvalueSet.append(len(set(values)) > 1)
+    if xaxisvalueSet.count(True) > 1:
+      print 'WARNING: more than one parameter of {} is varied. unexpected results may occur. please double check your graphs for accuracy.'.format(xaxisvalues)
+  
+  # multiple rows should not have the same input values
+  pointInputs = []
+  for point in data:
+    pointInputs.append(point.__str__().split(';')[0])
+  if len(set(pointInputs)) != len(data):
+    print 'ERROR: imported table has duplicate rows with identical input parameters'
+    quit()
+  
+  """
+  figure out if we have multiple plots on this graph (and what they should be)
+  """
+  if args.plot != None:
+    multiplePlots = args.plot
+  elif multiplePlotValues.count(True) == 1:
+    multiplePlots = plotvalues[multiplePlotValues.index(True)]
+  else:
+    # default to device if none of the options to plot have multiple values
+    multiplePlots = 'device'
+  
+  """
+  assemble data for the graphs
+  """
+  data.sort(key=lambda row: int(getattr(row, args.graphxaxis)))
+  
+  # choose scale for x axis
+  if args.xaxisscale == None:
+    # user didn't specify. autodetect
+    if int(getattr(data[len(data)-1], args.graphxaxis)) > 2000: # big numbers on x-axis
+      args.xaxisscale = 'log2'
+    elif int(getattr(data[len(data)-1], args.graphxaxis)) > 10000: # bigger numbers on x-axis
+      args.xaxisscale = 'log10'
+    else: # small numbers on x-axis
+      args.xaxisscale = 'linear'
+  
+  if args.xaxisscale == 'linear':
+    plotkwargs = {}
+    plottype = 'plot'
+  elif args.xaxisscale == 'log2':
+    plottype = 'semilogx'
+    plotkwargs = {'basex':2}
+  elif args.xaxisscale == 'log10':
+    plottype = 'semilogx'
+    plotkwargs = {'basex':10}
+  else:
+    print 'ERROR: invalid value for x-axis scale'
+    quit()
+  
+  plots = set(getattr(row, multiplePlots) for row in data)
+  
+  class DataForOnePlot:
+    def __init__(self, inlabel, inxdata, inydata):
+      self.label = inlabel
+      self.xdata = inxdata
+      self.ydata = inydata
+  
+  dataForAllPlots = []
+  for plot in plots:
+    dataForThisPlot = itertools.ifilter( lambda x: getattr(x, multiplePlots) == plot, data)
+    dataForThisPlot = list(itertools.islice(dataForThisPlot, None))
+    if args.graphxaxis == 'problemsize':
+      xdata = [int(row.x) * int(row.y) * int(row.z) * int(row.batchsize) for row in dataForThisPlot]
     else:
-      # autogen a lovely y-axis label
-      if args.graphyaxis == 'gflops':
-        units = 'GFLOPS'
-      yaxislabel = 'Performance (' + units + ')'
-
-    """
-    display a pretty graph
-    """
-    colors = ['k', 'y', 'm', 'c', 'r', 'b', 'g']
-
-    for thisPlot in dataForAllPlots:
-      getattr(pylab, plottype)(thisPlot.xdata, thisPlot.ydata, '{}.-'.format(colors.pop()), label=thisPlot.label, **plotkwargs)
-
-    if len(dataForAllPlots) > 1:
-      pylab.legend(loc='best')
-
-    pylab.title(title)
-    pylab.xlabel(xaxislabel)
-    pylab.ylabel(yaxislabel)
-    pylab.grid(True)
-
-    if args.outputFilename == None:
-      # if no pdf output is requested, spit the graph to the screen . . .
-      pylab.show()
+      xdata = [getattr(row, args.graphxaxis) for row in dataForThisPlot]
+    ydata = [getattr(row, args.graphyaxis) for row in dataForThisPlot]
+    dataForAllPlots.append(DataForOnePlot(plot,xdata,ydata))
+  
+  """
+  assemble labels for the graph or use the user-specified ones
+  """
+  if args.graphtitle:
+    # use the user selection
+    title = args.graphtitle
+  else:
+    # autogen a lovely title
+    title = 'Performance vs. ' + args.graphxaxis.capitalize()
+  
+  if args.xaxislabel:
+    # use the user selection
+    xaxislabel = args.xaxislabel
+  else:
+    # autogen a lovely x-axis label
+    if args.graphxaxis == 'cachesize':
+      units = '(bytes)'
     else:
-      # . . . otherwise, gimme gimme pdf
-      # pdf = PdfPages(args.outputFilename)
-      # pdf.savefig()
-      # pdf.close()
-      pylab.savefig(args.outputFilename, dpi=(1024 / 8))
+      units = '(datapoints)'
+  
+    xaxislabel = args.graphxaxis + ' ' + units
+  
+  if args.yaxislabel:
+    # use the user selection
+    yaxislabel = args.yaxislabel
+  else:
+    # autogen a lovely y-axis label
+    if args.graphyaxis == 'gflops':
+      units = 'GFLOPS'
+    yaxislabel = 'Performance (' + units + ')'
+  
+  """
+  display a pretty graph
+  """
+  colors = ['k','y','m','c','r','b','g']
+  
+  for thisPlot in dataForAllPlots:
+    getattr(pylab, plottype)(thisPlot.xdata, thisPlot.ydata, '{}.-'.format(colors.pop()), label=thisPlot.label, **plotkwargs)
+  
+  if len(dataForAllPlots) > 1:
+    pylab.legend(loc='best')
+  
+  pylab.title(title)
+  pylab.xlabel(xaxislabel)
+  pylab.ylabel(yaxislabel)
+  pylab.grid(True)
+  
+  if args.outputFilename == None:
+    # if no pdf output is requested, spit the graph to the screen . . .
+    pylab.show()
+  else:
+    # . . . otherwise, gimme gimme pdf
+    #pdf = PdfPages(args.outputFilename)
+    #pdf.savefig()
+    #pdf.close()
+    pylab.savefig(args.outputFilename,dpi=(1024/8))
 ######### plotFromDataFile() Function to plot from data file ends #########
 
 
@@ -248,62 +247,60 @@ def plotFromDataFile():
 define and parse parameters
 """
 
-xaxisvalues = ['x', 'y', 'z', 'batchsize', 'problemsize']
+xaxisvalues = ['x','y','z','batchsize','problemsize']
 yaxisvalues = ['gflops']
 plotvalues = ['device', 'precision', 'label']
 
 
 
 parser = argparse.ArgumentParser(description='Plot performance of the clfft\
- library. clfft.plotPerformance.py reads in data tables from clfft.\
- measurePerformance.py and plots their values')
+    library. clfft.plotPerformance.py reads in data tables from clfft.\
+    measurePerformance.py and plots their values')
 fileOrDb = parser.add_mutually_exclusive_group(required=True)
 fileOrDb.add_argument('-d', '--datafile',
-                      dest='datafile', action='append', default=None, required=False,
-                      help='indicate a file to use as input. must be in the format output by\
- clfft.measurePerformance.py. may be used multiple times to indicate\
- multiple input files. e.g., -d cypressOutput.txt -d caymanOutput.txt')
+  dest='datafile', action='append', default=None, required=False,
+  help='indicate a file to use as input. must be in the format output by\
+  clfft.measurePerformance.py. may be used multiple times to indicate\
+  multiple input files. e.g., -d cypressOutput.txt -d caymanOutput.txt')
 parser.add_argument('-x', '--x_axis',
-                    dest='graphxaxis', default=None, choices=xaxisvalues, required=True,
-                    help='indicate which value will be represented on the x axis. problemsize\
- is defined as x*y*z*batchsize')
+  dest='graphxaxis', default=None, choices=xaxisvalues, required=True,
+  help='indicate which value will be represented on the x axis. problemsize\
+      is defined as x*y*z*batchsize')
 parser.add_argument('-y', '--y_axis',
-                    dest='graphyaxis', default='gflops', choices=yaxisvalues,
-                    help='indicate which value will be represented on the y axis')
+  dest='graphyaxis', default='gflops', choices=yaxisvalues,
+  help='indicate which value will be represented on the y axis')
 parser.add_argument('--plot',
-                    dest='plot', default=None, choices=plotvalues,
-                    help='indicate which of {} should be used to differentiate multiple plots.\
- this will be chosen automatically if not specified'.format(plotvalues))
+  dest='plot', default=None, choices=plotvalues,
+  help='indicate which of {} should be used to differentiate multiple plots.\
+      this will be chosen automatically if not specified'.format(plotvalues))
 parser.add_argument('--title',
-                    dest='graphtitle', default=None,
-                    help='the desired title for the graph generated by this execution. if\
- GRAPHTITLE contains any spaces, it must be entered in \"double quotes\".\
- if this option is not specified, the title will be autogenerated')
+  dest='graphtitle', default=None,
+  help='the desired title for the graph generated by this execution. if\
+      GRAPHTITLE contains any spaces, it must be entered in \"double quotes\".\
+      if this option is not specified, the title will be autogenerated')
 parser.add_argument('--x_axis_label',
-                    dest='xaxislabel', default=None,
-                    help='the desired label for the graph\'s x-axis. if XAXISLABEL contains\
- any spaces, it must be entered in \"double quotes\". if this option\
- is not specified, the x-axis label will be autogenerated')
+  dest='xaxislabel', default=None,
+  help='the desired label for the graph\'s x-axis. if XAXISLABEL contains\
+      any spaces, it must be entered in \"double quotes\". if this option\
+      is not specified, the x-axis label will be autogenerated')
 parser.add_argument('--x_axis_scale',
-                    dest='xaxisscale', default=None, choices=['linear', 'log2', 'log10'],
-                    help='the desired scale for the graph\'s x-axis. if nothing is specified,\
- it will be selected automatically')
+  dest='xaxisscale', default=None, choices=['linear','log2','log10'],
+  help='the desired scale for the graph\'s x-axis. if nothing is specified,\
+      it will be selected automatically')
 parser.add_argument('--y_axis_label',
-                    dest='yaxislabel', default=None,
-                    help='the desired label for the graph\'s y-axis. if YAXISLABEL contains any\
- spaces, it must be entered in \"double quotes\". if this option is not\
- specified, the y-axis label will be autogenerated')
+  dest='yaxislabel', default=None,
+  help='the desired label for the graph\'s y-axis. if YAXISLABEL contains any\
+      spaces, it must be entered in \"double quotes\". if this option is not\
+      specified, the y-axis label will be autogenerated')
 parser.add_argument('--outputfile',
-                    dest='outputFilename', default=None,
-                    help='name of the file to output graphs. Supported formats: emf, eps, \
-pdf, png, ps, raw, rgba, svg, svgz.')
+  dest='outputFilename', default=None,
+  help='name of the file to output graphs. Supported formats: emf, eps, pdf, png, ps, raw, rgba, svg, svgz.')
 
 args = parser.parse_args()
 
 if args.datafile != None:
-    plotFromDataFile()
+  plotFromDataFile()
 else:
-    print "Atleast specify if you want to use text files or database for plotting graphs.\
- Use -h or --help option for more details"
-    quit()
+  print "Atleast specify if you want to use text files or database for plotting graphs. Use -h or --help option for more details"
+  quit()
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/clfft.git



More information about the debian-science-commits mailing list