unsigned int GPUInterface::GetAvailableMemory() { #if CUDA_VERSION >= 3020 size_t availableMem = 0; size_t totalMem = 0; SAFE_CUPP(cuMemGetInfo(&availableMem, &totalMem)); #else unsigned int availableMem = 0; unsigned int totalMem = 0; SAFE_CUPP(cuMemGetInfo(&availableMem, &totalMem)); #endif return availableMem; }
void GPUInterface::SynchronizeDevice() { #ifdef BEAGLE_DEBUG_FLOW fprintf(stderr,"\t\t\tEntering GPUInterface::SynchronizeDevice\n"); #endif SAFE_CUPP(cuEventRecord(cudaEvents[numStreams], 0)); SAFE_CUPP(cuStreamWaitEvent(0, cudaEvents[numStreams], 0)); #ifdef BEAGLE_DEBUG_FLOW fprintf(stderr,"\t\t\tLeaving GPUInterface::SynchronizeDevice\n"); #endif }
void* GPUInterface::AllocatePinnedHostMemory(size_t memSize, bool writeCombined, bool mapped) { #ifdef BEAGLE_DEBUG_FLOW fprintf(stderr,"\t\t\tEntering GPUInterface::AllocatePinnedHostMemory\n"); #endif void* ptr; unsigned int flags = 0; if (writeCombined) flags |= CU_MEMHOSTALLOC_WRITECOMBINED; if (mapped) flags |= CU_MEMHOSTALLOC_DEVICEMAP; SAFE_CUPP(cuMemHostAlloc(&ptr, memSize, flags)); #ifdef BEAGLE_DEBUG_VALUES fprintf(stderr, "Allocated pinned host (CPU) memory %ld to %lu .\n", (long)ptr, ((long)ptr + memSize)); #endif #ifdef BEAGLE_DEBUG_FLOW fprintf(stderr, "\t\t\tLeaving GPUInterface::AllocatePinnedHostMemory\n"); #endif return ptr; }
void GPUInterface::SynchronizeDeviceWithIndex(int streamRecordIndex, int streamWaitIndex) { #ifdef BEAGLE_DEBUG_FLOW fprintf(stderr,"\t\t\tEntering GPUInterface::SynchronizeDeviceWithIndex\n"); #endif CUstream streamRecord = NULL; CUstream streamWait = NULL; if (streamRecordIndex >= 0) streamRecord = cudaStreams[streamRecordIndex % numStreams]; if (streamWaitIndex >= 0) streamWait = cudaStreams[streamWaitIndex % numStreams]; SAFE_CUPP(cuEventRecord(cudaEvents[numStreams], streamRecord)); SAFE_CUPP(cuStreamWaitEvent(streamWait, cudaEvents[numStreams], 0)); #ifdef BEAGLE_DEBUG_FLOW fprintf(stderr,"\t\t\tLeaving GPUInterface::SynchronizeDeviceWithIndex\n"); #endif }
void GPUInterface::FreeMemory(GPUPtr dPtr) { #ifdef BEAGLE_DEBUG_FLOW fprintf(stderr, "\t\t\tEntering GPUInterface::FreeMemory\n"); #endif SAFE_CUPP(cuMemFree(dPtr)); #ifdef BEAGLE_DEBUG_FLOW fprintf(stderr,"\t\t\tLeaving GPUInterface::FreeMemory\n"); #endif }
void GPUInterface::FreePinnedHostMemory(void* hPtr) { #ifdef BEAGLE_DEBUG_FLOW fprintf(stderr, "\t\t\tEntering GPUInterface::FreePinnedHostMemory\n"); #endif SAFE_CUPP(cuMemFreeHost(hPtr)); #ifdef BEAGLE_DEBUG_FLOW fprintf(stderr,"\t\t\tLeaving GPUInterface::FreePinnedHostMemory\n"); #endif }
void GPUInterface::SynchronizeHost() { #ifdef BEAGLE_DEBUG_FLOW fprintf(stderr,"\t\t\tEntering GPUInterface::SynchronizeHost\n"); #endif SAFE_CUPP(cuCtxSynchronize()); #ifdef BEAGLE_DEBUG_FLOW fprintf(stderr,"\t\t\tLeaving GPUInterface::SynchronizeHost\n"); #endif }
void GPUInterface::MemcpyDeviceToDevice(GPUPtr dest, GPUPtr src, size_t memSize) { #ifdef BEAGLE_DEBUG_FLOW fprintf(stderr, "\t\t\tEntering GPUInterface::MemcpyDeviceToDevice\n"); #endif SAFE_CUPP(cuMemcpyDtoD(dest, src, memSize)); #ifdef BEAGLE_DEBUG_FLOW fprintf(stderr, "\t\t\tLeaving GPUInterface::MemcpyDeviceToDevice\n"); #endif }
void GPUInterface::MemsetShort(GPUPtr dest, unsigned short val, size_t count) { #ifdef BEAGLE_DEBUG_FLOW fprintf(stderr, "\t\t\tEntering GPUInterface::MemsetShort\n"); #endif SAFE_CUPP(cuMemsetD16(dest, val, count)); #ifdef BEAGLE_DEBUG_FLOW fprintf(stderr, "\t\t\tLeaving GPUInterface::MemsetShort\n"); #endif }
void GPUInterface::MemcpyDeviceToHost(void* dest, const GPUPtr src, size_t memSize) { #ifdef BEAGLE_DEBUG_FLOW fprintf(stderr, "\t\t\tEntering GPUInterface::MemcpyDeviceToHost\n"); #endif SAFE_CUPP(cuMemcpyDtoHAsync(dest, src, memSize, cudaStreams[0])); #ifdef BEAGLE_DEBUG_FLOW fprintf(stderr, "\t\t\tLeaving GPUInterface::MemcpyDeviceToHost\n"); #endif }
GPUPtr GPUInterface::GetDevicePointer(void* hPtr) { #ifdef BEAGLE_DEBUG_FLOW fprintf(stderr, "\t\t\tEntering GPUInterface::GetDevicePointer\n"); #endif GPUPtr dPtr; SAFE_CUPP(cuMemHostGetDevicePointer(&dPtr, hPtr, 0)); #ifdef BEAGLE_DEBUG_FLOW fprintf(stderr,"\t\t\tLeaving GPUInterface::GetDevicePointer\n"); #endif return dPtr; }
GPUFunction GPUInterface::GetFunction(const char* functionName) { #ifdef BEAGLE_DEBUG_FLOW fprintf(stderr,"\t\t\tEntering GPUInterface::GetFunction\n"); #endif GPUFunction cudaFunction; SAFE_CUPP(cuModuleGetFunction(&cudaFunction, cudaModule, functionName)); #ifdef BEAGLE_DEBUG_FLOW fprintf(stderr,"\t\t\tLeaving GPUInterface::GetFunction\n"); #endif return cudaFunction; }
void GPUInterface::MemcpyHostToDevice(GPUPtr dest, const void* src, size_t memSize) { #ifdef BEAGLE_DEBUG_FLOW fprintf(stderr, "\t\t\tEntering GPUInterface::MemcpyHostToDevice\n"); #endif // SAFE_CUPP(cuMemcpyHtoDAsync(dest, src, memSize, cudaStreams[0])); SAFE_CUPP(cuMemcpyHtoD(dest, src, memSize)); #ifdef BEAGLE_DEBUG_FLOW fprintf(stderr, "\t\t\tLeaving GPUInterface::MemcpyHostToDevice\n"); #endif }
GPUPtr GPUInterface::AllocateIntMemory(size_t length) { #ifdef BEAGLE_DEBUG_FLOW fprintf(stderr, "\t\t\tEntering GPUInterface::AllocateIntMemory\n"); #endif GPUPtr ptr; SAFE_CUPP(cuMemAlloc(&ptr, SIZE_INT * length)); #ifdef BEAGLE_DEBUG_VALUES fprintf(stderr, "Allocated GPU memory %llu to %llu.\n", (unsigned long long)ptr, (unsigned long long)(ptr + length)); #endif #ifdef BEAGLE_DEBUG_FLOW fprintf(stderr, "\t\t\tLeaving GPUInterface::AllocateIntMemory\n"); #endif return ptr; }