При профилировании: что такое вызовы API: cuLaunchKernel в cupy

#cupy

Вопрос:

Я пытаюсь профилировать программу с помощью CUPY с помощью nvprof. Я использую with cupy.prof.time_range для маркировки блока кода. В некоторых блоках есть длинный вызов API cuLaunchKernel, но не во всех блоках.

Поэтому мой вопрос таков:

  • что это за вызов API ?
  • почему это происходит после инициализации, когда я использую только стандартные функции cupy, такие как сумма, деление и выбор диапазонов?
  • при каких условиях это занимает очень много времени?
      ==79543==       Range "PAY AND COLLECT TAXES"
              Type  Time(%)      Time     Calls       Avg       Min       Max  Name
            Range:  100.00%  53.9934s       200  269.97ms  397.80us  284.49ms  PAY AND       COLLECT TAXES
        GPU activities:   88.21%  879.16ms       800  1.0989ms  3.3280us  4.3608ms  cupy_sum
                     11.47%  114.32ms       800  142.90us  2.9440us  536.79us   cupy_subtract__float64_float64_float64
                      0.24%  2.4255ms       800  3.0310us  2.8160us  3.8080us  cupy_add__float64_float64_float64
                      0.07%  720.40us       200  3.6020us  3.0080us  3.9680us  cupy_add__float_float64_float64
        API calls:  100.00%  53.8110s      2600  20.697ms  6.3000us  125.94ms  cuLaunchKernel