Обычная программа CUDA:
так что если я измерить время хоста на устройство
time = clock ();
2. mem host to device;
cudaDeviceSynchronize;
time = clock () - time ;
и я получу значение 0,1 с в моем случае. но моя скорость шины PCI на самом деле составляет 24 ГБ / с, что должно дать в 1000 раз меньшее значение времени, поэтому я предполагаю, что 0,1 с — это время, которое используется для активации шины PCI.
поэтому я попытался зациклить время между хостом и устройством на 1000 раз, и впервые он показывает 0,1 с, а остальное время составляет всего 0,000 с (не может превышать миллисекунду), а общее время 1000 цикл всего 0,12 с.
поэтому я должен держать мою шину PCI устройства активированной, чтобы сократить время между хостом и устройством. я попытался использовать cudaDeviceSynchronize, как показано ниже:
cudaDeviceSynchronize; //---to keep PCI bus activate
time = clock ();
2. mem host to device;
cudaDeviceSynchronize;
time = clock () - time ;
и время, которое я получаю, составляет 0,000 с, а время, проведенное на хосте с устройством, сводится к минимуму. Это верно? 0,1 с = время «активации» шины PCI?
Как Роберт Кровелла предполагает, что время, которое вы измеряете при первом вызове функции CUDA, связано с инициализацией CUDA.
Кроме того, если вы измеряете столь малые периоды, вы, скорее всего, просто измеряете накладные расходы вызова функции. Вы должны попытаться увеличить размер памяти, которую вы копируете, чтобы получить более значимые числа.
Если вы заинтересованы в измерении времени копирования между процессором и графическим процессором, вам определенно следует попробовать поиграть с закрепленной памятью, как описано в документация.
Других решений пока нет …