zeratax / yacx

Yet Another CudaExecutor - wrapper to easily compile and execute cuda kernels
https://zeratax.github.io/yacx
MIT License
8 stars 4 forks source link

async launch #47

Open zeratax opened 4 years ago

zeratax commented 4 years ago

während kernel launch kann der CPU weiter arbeiten

zeratax commented 4 years ago

Vielleicht so:

// default block call
kernel.launch(args);

// async launch
kernel.upload(args); // mit den args bin ich nicht so sicher
kernel.asynclaunch(args);
cpufunction();
kernel.download(); // ruft Kernel.sync() und dann KernelArgs.download() auf

Also ist der launch eig nur

KernelTime kernel.launch(KernelArgs args, Device device = Device{}) {
   KernelTime time;
   CudaEvent stop, start;

   CudaEventRecord(start);
   time.upload = upload(args);
   time.launch = asynclaunch(args, device);
   time.download = download();
   CudaEventRecord(stop);
   time.total = CudaEventTime(start, stop);

   return time;
}
LukasSiefke commented 4 years ago

Ist auf Branch FastKernelExample&TranspositionPinnendStream. Damit ist auch die Benchmarkfuntion deutlich schneller, weil dort dann gleichzeitig upload, launch und download statt findet. Dabei ist nur die total-time ein bisschen problematisch, weil das free immer eine Synchonisierung der Streams erzwingt, weshalb in der Benchmarkfunktion nur einmalig am Ende gefreet wird, wesegen die total-time geringer ist als sonst mit free.