1 i am actually solving pearson correlation coefficient (pcc) 2 3 import pycuda.driver as cuda 4 import pycuda.gpuarray as gpuarray 5 import pycuda.autoinit 6 from pycuda.compiler import SourceModule 7 import numpy as np 8 import time 9 10 start = time.time() 11 N = np.int32(512000) 12 block_size = 512 13 gridsize = N/block_size
14 x_cpu = np.random.randn(N).astype(np.float32) 15 x_gpu = gpuarray.to_gpu(x_cpu) 16 17 y_cpu = np.random.randn(N).astype(np.float32) 18 y_gpu = gpuarray.to_gpu(y_cpu) 19 20 #r = np.array(0).astype(np.float32) 21 res = gpuarray.empty_like(x_gpu) 22 xy_sum = gpuarray.sum(x_gpu * y_gpu) 23 x_sum = gpuarray.sum(x_gpu) 24 y_sum = gpuarray.sum(y_gpu) 25 sq_of_sum_of_x = gpuarray.sum(x_sum * x_sum) 26 #sq_of_sum_of_x = x_sum * y_sum # do in gpu 27 sq_of_sum_of_y = gpuarray.sum(y_sum * y_sum) # do in gpu 28 sum_of_ysq = gpuarray.sum(y_gpu * y_gpu) 29 sum_of_xsq = gpuarray.sum(x_gpu * x_gpu) 30 #res = gpuarray.sum(res1) 31 arr = np.array([xy_sum,x_sum,y_sum,sq_of_sum_of_x,sq_of_sum_of_y,sum_of_ysq ,sum_of_xsq]) 32 arr_gpu = gpuarray.to_gpu(arr) 33 print ("array=%s" %(arr)) # this is kernel1 34 '''kernels = SourceModule(""" 35 __global__ void pcc(float *res,int N,float xy,float x,float y,float sqsumx,float sqsumy,float sumysq, float sumxsq )''' 36 37 kernels = SourceModule(""" 38 __global__ void pcc(float *res,int N, float *arr) 39 { 40 res[0] = arr[0]; 41 // res[0] = 55; 42 // res[0]= (N * xy);// - (x * y)); // 43 // res[0] = sqrt((N * sqsumx - sumxsq)*(N * sqsumy - sumysq)); 44 } 45 """) 46 47 cov = kernels.get_function("pcc") 48 cov(res,N,arr,block=(block_size,1,1),grid = (gridsize,1)) 49 ##################################################################### #this second kernel kernels = SourceModule(""" 35 __global__ void pcc(float *res,int N,float xy,float x,float y,float sqsumx,float sqsumy,float sumysq, float sumxsq ) 39 { 40 41 42 res[0]= ((N * xy)- (x * y))/sqrt((N * sqsumx - sumxsq)*(N * sqsumy - sumysq)); 44 } 45 """) cov = kernels.get_function("pcc") cov(res,N,xy_sum,x_sum,y_sum,sq_of_sum_of_x,sq_of_sum_of_y,sum_of_ysq,sum_o f_xsq,block=(block_size,1,1),grid = (gridsize,1)) 50 #################################################################### 51 pcc = gpuarray.sum(res[0]) 52 #pcc = gpuarray.sum((N * xy_sum - x_sum * y_sum)/sqrt((N*sum_of_xsq-sq_of_su m_of_x)*(N*sum_of_ysq-sq_of_sum_of_y))) 53 #print ("result of xy=%s" %(result)) 54 print ("result of xy w/o kernal function = %s" %(xy_sum)) 55 print ("result of x*x=%s" %(x_sum)) 56 print ("result of y*y=%s" %(y_sum)) 57 print ("result of sum of square of x=%s" %(sum_of_xsq)) 58 print ("result of sum of square of y=%s" %(sum_of_ysq)) 59 print ("result of sq_of_sum_of_x=%s" %(sq_of_sum_of_x)) 60 print ("result of pcc=%s" %(pcc)) 61 finish = time.time() 62 print("exection time =%s" %(finish-start)) please ignore the serial number sir, if use kernel1 the i get error as arr_gpu = gpuarray.to_gpu(arr) File "/opt/python/lib/python2.7/site-packages/pycuda-2016.1.1-py2.7-linux-x86_64.egg/pycuda/gpuarray.py", line 976, in to_gpu result.set(ary) File "/opt/python/lib/python2.7/site-packages/pycuda-2016.1.1-py2.7-linux-x86_64.egg/pycuda/gpuarray.py", line 243, in set _memcpy_discontig(self, ary, async=async, stream=stream) File "/opt/python/lib/python2.7/site-packages/pycuda-2016.1.1-py2.7-linux-x86_64.egg/pycuda/gpuarray.py", line 1192, in _memcpy_discontig src = _as_strided(src, shape=(src.size,), strides=(src.dtype.itemsize,)) File "/opt/python/lib/python2.7/site-packages/numpy/lib/stride_tricks.py", line 32, in as_strided array.dtype = x.dtype TypeError: Cannot change data-type for object array. and if i use kernel 2 the i get answer as res[0] = 0.0 i.e it does not value from ((N * xy)- (x * y))/sqrt((N * sqsumx - sumxsq)*(N * sqsumy - sumysq)); can you please help me out sir. ----------------------------------------- ___________________ D I S C L A I M E R This e-mail may contain privileged information and is intended solely for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. Please notify the sender immediately by e-mail if you have received this e-mail in error and destroy it from your system. Though considerable effort has been made to deliver error free e-mail messages but it can not be guaranteed to be secure or error-free as information could be intercepted, corrupted, lost, destroyed, delayed or incomplete, or may contain viruses. The recipient must verify the integrity of this e-mail message. _______________________________________________ PyCUDA mailing list PyCUDA@tiker.net https://lists.tiker.net/listinfo/pycuda