Open zeratax opened 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;
}
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.
während kernel launch kann der CPU weiter arbeiten