public HuForceDirectedLayout(int steps) { #if !DEBUG try { #endif CUDADriver.cuInit(0); dev = new CUdevice(); CUDADriver.cuDeviceGet(ref dev, 0); ctx = new CUcontext(); CUDADriver.cuCtxCreate(ref ctx, 0, dev); mod = new CUmodule(); CUDADriver.cuModuleLoad(ref mod, "BarnesHut.cubin"); prop = new CUDeviceProperties(); CUDADriver.cuDeviceGetProperties(ref prop, dev); int version = 0; CUDADriver.cuDriverGetVersion(ref version); string caps = ""; GASS.CUDA.CUDARuntime.cudaRuntimeGetVersion(ref version); caps += "\tClock rate = " + prop.clockRate/1000000 + " MHz\n"; caps += "\tMemory size = " + prop.totalConstantMemory/1024 + " KB\n"; caps += "\tThreads per block = " + prop.maxThreadsPerBlock + "\n"; caps += "\tWarp size = " + prop.SIMDWidth + "\n"; caps += "\tCUDA version = " + version + "\n"; Logger.AddMessage(LogEntryType.Info, "Successfully initialized CUDA GPU computation\n"+caps); #if !DEBUG } catch(Exception ex) { Logger.AddMessage(LogEntryType.Warning, "CUDA not available, falling back to CPU. Exception was: " + ex.Message); CUDAEnabled = false; } #endif }
public static extern CUResult cuD3D9CtxCreate(ref CUcontext pCtx, ref CUdevice pCuDevice, CUCtxFlags Flags, IntPtr pDxDevice);
public static extern CUResult cuD3D10CtxCreate(ref CUcontext pCtx, ref CUdevice pCuDevice, uint Flags, IntPtr pDxDevice);
public static extern CUResult cuCtxPopCurrent_v2(ref CUcontext pctx);
public static extern CUResult cuCtxPushCurrent_v2(CUcontext ctx);
public void StopFloating(CUcontext pctx) { this.LastError = CUDADriver.cuCtxPushCurrent(pctx); }
public static extern CUResult cuCtxDisablePeerAccess(CUcontext peerContext);
public static extern CUResult cuCtxDestroy_v2(CUcontext ctx);
public static extern CUResult cuCtxDetach(CUcontext ctx);
public static extern CUResult cuCtxAttach(ref CUcontext pctx, uint flags);
public static extern CUResult cuCtxCreate(ref CUcontext pctx, uint flags, CUdevice dev);
public static extern CUResult cuPointerGetAttribute(ref CUcontext ctx, CUPointerAttribute attribute, CUdeviceptr ptr);
public static extern CUResult cuMemcpyPeerAsync(CUdeviceptr dstDevice, CUcontext dstContext, CUdeviceptr srcDevice, CUcontext srcContext, SizeT ByteCount, CUstream hStream);
public static extern CUResult cuMemcpyPeer (CUdeviceptr dstDevice, CUcontext dstContext, CUdeviceptr srcDevice, CUcontext srcContext, SizeT ByteCount);
public CUDAContextSynchronizer(CUcontext ctx) { this.ctx = ctx; }
public static extern CUResult cuCtxGetCurrent(ref CUcontext pctx);
//private CUcontext _pctx; public CUcontext MakeFloating() { CUcontext pctx = new CUcontext(); this.LastError = CUDADriver.cuCtxPopCurrent(ref pctx); return pctx; }
public static extern CUResult cuCtxSetCurrent(CUcontext pctx);
public static extern CUResult cuGLCtxCreate(ref CUcontext pCtx, uint Flags, CUdevice device);
public static extern CUResult cuCtxEnablePeerAccess(CUcontext peerContext, uint Flags);