Разница в создании контекста CUDA

У меня есть программа, которая использует три ядра. Чтобы получить ускорения, я делал фиктивную копию памяти, чтобы создать контекст следующим образом:

__global__ void warmStart(int* f)
{
    *f = 0;
}

который запускается раньше, чем ядра, я хочу время следующим образом:

int *dFlag = NULL;
cudaMalloc( (void**)&dFlag, sizeof(int) );
warmStart<<<1, 1>>>(dFlag);
Check_CUDA_Error("warmStart kernel");

Я также читал о других простейших способах создания контекста какcudaFree(0) или жеcudaDevicesynchronize(), Но использование этих вызовов API дает худшие времена, чем использование фиктивного ядра.

Время выполнения программы после форсирования контекста0.000031 секунды для фиктивного ядра и0.000064 секунд для обоих, cudaDeviceSynchronize () и cudaFree (0). В среднем было получено 10 отдельных исполнений программы.

Поэтому я пришел к выводу, что запуск ядра инициализирует что-то, что не инициализируется при создании контекста каноническим способом.

Итак, в чем разница создания контекста этими двумя способами, используя ядро и вызов API?

Я запускаю тест на GTX480, используя CUDA 4.0 под Linux.

Ответы на вопрос(1)

Ваш ответ на вопрос