Это правильно и ожидаемо.
Когда вы вызываете его в первый раз, ему нужно инициализировать графический процессор (в некотором смысле «включить»), настроить контексты CUDA, et c et c. Во второй раз, когда вы запускаете его, графический процессор готов принять все, что вы на него бросите.
Кроме того, зависит от того, как вы написали код, возможно, в первый раз, когда требуется переместить некоторые данные в графический процессор, и, возможно, во второй раз, когда память уже там.
Часто выполнение gpuDevice(1)
достаточно инициализирует контекст, но в противном случае просто добавьте в него небольшое матричное умножение для инициализации.
Все это как-то верно для других парадигм параллельных вычислений в MATLAB, например, если вы хотите использовать parfor
, вам нужно инициализировать параллельный пул, или это займет очень много времени в первый раз.