Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create a CUDA context?

How can I create a CUDA context? The first call of CUDA is slow and I want to create the context before I launch my kernel.

like image 628
Arkerone Avatar asked May 02 '12 13:05

Arkerone


2 Answers

The canonical way to force runtime API context establishment is to call cudaFree(0). If you have multiple devices, call cudaSetDevice() with the ID of the device you want to establish a context on, then cudaFree(0) to establish the context.

EDIT: Note that as of CUDA 5.0, it appears that the heuristics of context establishment are slightly different and cudaSetDevice() itself establishes context on the device is it called on. So the explicit cudaFree(0) call is no longer necessary (although it won't hurt anything).

like image 121
talonmies Avatar answered Sep 28 '22 08:09

talonmies


Using the runtime API: cudaDeviceSynchronize, cudaDeviceGetLimit, or anything that actually accesses the context should work.

I'm quite certain you're not using the driver API, as it doesn't do that sort of lazy initialization, but for others' benefit the driver call would be cuCtxCreate.

like image 42
ChrisV Avatar answered Sep 28 '22 08:09

ChrisV