Разница в создании контекста CUDA
Ве программа, которая использует три ядра. Чтобы получить ускорения, я делал фиктивную копию памяти, чтобы создать контекст следующим образом:
__global__ void warmStart(int* f)
{
*f = 0;
}
который запускается раньше, чем ядра, я хочу время следующим образом:
int *dFlag = NULL;
cudaMalloc( (void**)&dFlag, sizeof(int) );
warmStart(dFlag);
Check_CUDA_Error("warmStart kernel");
Я также читал о других простейших способах создания контекста какcudaFree(0)
или жеcudaDevicesynchronize()
, Но использование этих вызовов API дает худшие времена, чем использование фиктивного ядра.
Время выполнения программы после форсирования контекста0.000031
секунды для фиктивного ядра и0.000064
секунд для обоих, cudaDeviceSynchronize () и cudaFree (0). В среднем было получено 10 отдельных исполнений программы.
Поэтому вывод яДостигнуто то, что при запуске ядра инициализируется то, что не инициализируется при создании контекста каноническим способом.
И что'Есть ли разница в создании контекста этими двумя способами, используя ядро и вызов API?
Я запускаю тест на GTX480, используя CUDA 4.0 под Linux.