Вопросы о результатах счетчиков профилирования GPU - PullRequest
1 голос
/ 05 июля 2011

Я играл с счетчиками профилирования GPU (GTX580). Может ли кто-нибудь сказать мне, что вызывает неопределенность результатов счетчиков профилирования. У меня очень простое ядро, которое просто копирует буфер в другой буфер. И я профилирую инструкции, выполненные в этом ядре. Для некоторых настроек количества рабочих элементов и размера рабочей группы результаты стабильны при разных запусках. Но для некоторых других конфигураций он значительно отличается между разными прогонами. Мне сказали это, потому что деформация (и рабочая группа) для сопоставления СМ недетерминирована. Но, как я знаю, по крайней мере, деформации, принадлежащие рабочей группе, будут выполняться только в одном SM, а в ядре нет ветвей, поэтому в теории, независимо от того, как деформируются отображения в SM, результаты все равно должны быть так же. Любая помощь будет оценена.


РЕДАКТИРОВАТЬ: Это код вопроса:

#pragma OPENCL EXTENSION cl_khr_byte_addressable_store : enable 
__kernel void histogram(__global float* x, __global float* y) 
{
    int id = get_global_id(0);
    y[id] = x[id];
}

1 Ответ

4 голосов
/ 05 июля 2011

Профилировщик только инструментирует подмножество мультипроцессоров для сбора данных, а затем масштабирует результаты до полного графического процессора. Если ваш код не «равномерно» заполняет каждый MP одним и тем же количеством блоков, тогда может быть различие в выходных данных профилировщика в зависимости от того, сколько работы профилирующих MP получено за данный прогон. В экстремальных ситуациях, когда ядра работают с очень небольшим количеством блоков на большом графическом процессоре, профилирование может фактически не собрать какую-либо статистику, потому что профилирующие MP не выполнили никаких блоков вообще.

...