public static string Init(int[] inputs, uint span) { _span = span; _area = _span * _span; d_rands = new IntPtr(); d_gridA = new IntPtr(); d_gridB = new IntPtr(); d_energy = new IntPtr(); d_energyBlocks = new IntPtr(); _cudaArray = new CudaArray(); _gridProcs = new GridProcs(); _randoProcs = new RandoProcs(); var strRet = _cudaArray.ResetDevice(); strRet = strRet + _randoProcs.MakeGenerator64(SEED); strRet = strRet + _cudaArray.MallocIntsOnDevice(ref d_gridA, _area); strRet = strRet + _cudaArray.MallocIntsOnDevice(ref d_energy, _area); strRet = strRet + _cudaArray.MallocIntsOnDevice(ref d_energyBlocks, _area / 1024); strRet = strRet + _cudaArray.MallocIntsOnDevice(ref d_gridB, _area); strRet = strRet + _cudaArray.CopyIntsToDevice(inputs, d_gridA, _area); strRet = strRet + _cudaArray.CopyIntsToDevice(inputs, d_gridB, _area); strRet = strRet + _cudaArray.MallocFloatsOnDevice(ref d_rands, _area); strRet = strRet + _cudaArray.MallocFloatsOnDevice(ref d_betas, 10); return(strRet); }
public static string Init(int[] inputs, uint span) { // init libs _cudaArray = new CudaArray(); _gridProcs = new GridProcs(); _randoProcs = new RandoProcs(); // Set grid sizes _span = span; _area = _span * _span; // Set block and thread sizes _blockSize = (_span < MAXTHREADS) ? _span : MAXTHREADS; _gridSize = _area / _blockSize; // Set memory sizes _mem_N = sizeof(int) * (_area); _mem_rand = sizeof(double) * (3 * _area); _mem_1 = sizeof(int) * (1); _mem_measured_quantity = sizeof(int) * (_gridSize); _mem_measured_magnet = sizeof(int) * (_gridSize); // Allocate device arrays d_rands = new IntPtr(); d_grid = new IntPtr(); var strRet = _cudaArray.ResetDevice(); strRet = strRet + _randoProcs.MakeGenerator64(SEED); strRet = strRet + _cudaArray.MallocIntsOnDevice(ref d_grid, _area); strRet = strRet + _cudaArray.CopyIntsToDevice(inputs, d_grid, _area); strRet = strRet + _cudaArray.MallocFloatsOnDevice(ref d_rands, _area); return(strRet); }