Время, которое будет использовано при расчете пропускной способности - PullRequest
1 голос
/ 22 февраля 2011

Я пытаюсь найти эффективную полосу пропускания, используемую моим кодом, против CUDA GEforce 8800 GTX максимум 86 ГБ / с. Я не уверен, какое время использовать, хотя. В настоящее время я использую разницу между вызовом ядра с моими инструкциями против вызова ядра без инструкций. Правильный ли это подход?

Также я получаю очень плохие издержки вызова ядра (около 1 секунды). Есть ли способ избавиться от этого?

Ответы [ 2 ]

1 голос
/ 23 февраля 2011

Вы можете довольно точно рассчитать время своего ядра с помощью событий cuda. ​​

//declare the events
cudaEvent_t start;
cudaEvent_t stop;
float kernel_time;

//create events before you use them
cudaEventCreate(&start);
cudaEventCreate(&stop);

//put events and kernel launches in the stream/queue
cudaEventRecord(start,0);
myKernel <<< config >>>( );
cudaEventRecord(stop,0);

//wait until the stop event is recorded
cudaEventSynchronize(stop);

//and get the elapsed time
cudaEventElapsedTime(&kernel_time,start,stop);

//cleanup
cudaEventDestroy(start);
cudaEVentDestroy(stop);
0 голосов
/ 24 февраля 2011

Эффективная пропускная способность в Гбит / с = ((Br + Bw) / 10 ^ 9) / Время

Br = количество байтов, прочитанных ядром из DRAM

Bw = количество байтов, записанных ядром в DRAM

Время = время, затраченное ядром.

Например, вы тестируетеэффективная пропускная способность копирования матрицы с плавающей запятой 2048x2048 (по 4 байта каждая) из одного места в другое в DRAM GPU.Формула будет выглядеть следующим образом:

Пропускная способность в ГБ / с = ((2048x2048 x 4 x 2) / 10 ^ 9) / по времени, занятое ядром

здесь:

2048x2048 (матричные элементы)

4 (каждый элемент имеет 4 байта)

2 (один для чтения и один для записи)

/ 10 ^ 9 для преобразования B в ГБ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...