outFile = open( fileName + "T", "w" ) outFile.write( codeString ) outFile.close() cudaCodeStringTemp = open("cudaBillar3D.cuT", "r").read() cudaCodeString = cudaCodeStringTemp % { "nSPHERES":nSpheres, "nWALLS":nWalls, "THREADS_PER_BLOCK":block[0], "TIME_INDEX_MAX":maxTimeIndx } cudaCode = SourceModule(cudaCodeString, no_extern_c=True, include_dirs=[currentDirectory]) mainKernel = cudaCode.get_function("main_kernel" ) ########################################################################### ########################################################################### #Initialize Data nData = particlesForPlot*collisionsForPlot print "Initializing CUDA memory" #np.random.seed(int(time.time())) #Change numpy random seed initialFreeMemory = getFreeMemory( show=True ) initialPosX_h = 0.45*np.ones(nParticles).astype(cudaPre) initialPosY_h = 0.45*np.ones(nParticles).astype(cudaPre) initialPosZ_h = 0.45*np.ones(nParticles).astype(cudaPre) #Spherically uniform random distribution for initial velocities initialTheta = 2*np.pi*np.random.rand(nParticles).astype(cudaPre) initialPhi = np.arccos(2*np.random.rand(nParticles).astype(cudaPre) - 1) initialVelX_h = np.cos(initialTheta)*np.sin(initialPhi) initialVelY_h = np.sin(initialTheta)*np.sin(initialPhi) initialVelZ_h = np.cos(initialPhi) initialRegionX_h = np.zeros(nParticles).astype(np.int32) initialRegionY_h = np.zeros(nParticles).astype(np.int32) initialRegionZ_h = np.zeros(nParticles).astype(np.int32) initialPosX_d = gpuarray.to_gpu( initialPosX_h ) initialPosY_d = gpuarray.to_gpu( initialPosY_h ) initialPosZ_d = gpuarray.to_gpu( initialPosZ_h )
def specialKeyboardFunc(key, x, y): global temp, beta if key == animation2D.GLUT_KEY_UP: temp += 0.1 if key == animation2D.GLUT_KEY_DOWN: if temp > 0.1: temp -= 0.1 beta = np.float32(1. / temp) animation2D.windowTitle = "Ising Model 2D spins={0}x{1} T={2:.1f}".format( nHeight, nWidth, float(temp)) ######################################################################## ######################################################################## #Initialize all gpu data print "\nInitializing Data" initialMemory = getFreeMemory(show=True) #Set initial random distribution spins_h = (2 * np.random.random_integers(0, 1, [nHeight, nWidth]) - 1).astype( np.int32) spinsOut_d = gpuarray.to_gpu(spins_h) randomNumbers_d = curandom.rand((nData)) #For texture version spinsInArray_d, copy2D_dtod = gpuArray2DtocudaArray(spinsOut_d) #For shared version finalMemory = getFreeMemory(show=False) print " Total Global Memory Used: {0} Mbytes\n".format( float(initialMemory - finalMemory) / 1e6) ######################################################################## ######################################################################## #configure animation2D functions and plotData
return dataAll[...] ######################################################################## def saveState(): ensureDirectory( dataDir ) psi_h = psi_d.get() print "Saving Data" np.savetxt(dataDir + "psi_re.dat", psi_h.real.reshape(nData) ) np.savetxt(dataDir + "psi_im.dat", psi_h.imag.reshape(nData) ) dataFile = h5.File( dataDir + 'psi.hdf5' ,'w') dataFile.create_dataset( "psi", data=psi_d.get(), compression='lzf') dataFile.close() print "Data Saved: {0}\n".format( dataDir ) ####################################################################### print "\nInitializing Data" initialMemory = getFreeMemory( show=True ) psi_h = np.zeros( X.shape, dtype=cudaPreComplex ) psi_h.real = gaussian3D ( X, Y, Z, gammaX, gammaY, gammaZ, random=True ) ##################################################### #Load Data #psi_h = loadState().astype(cudaPreComplex) ##################################################### print " Making FFT plan" from pyfft.cuda import Plan fftPlan = Plan((nDepth, nHeight, nWidth), dtype=cudaPreComplex) #from scikits.cuda.fft import fft, Plan #fftPlan = Plan((nDepth, nHeight, nWidth), in_dtype=cudaPreComplex, out_dtype=cudaPreComplex) fftKx_h = np.zeros( nWidth, dtype=cudaPre ) fftKy_h = np.zeros( nHeight, dtype=cudaPre ) fftKz_h = np.zeros( nDepth, dtype=cudaPre ) for i in range(nWidth/2):