общее количество регистров

Я хотел спросить. Мы говорим, что использование --ptxas-options=-v не дает точного количества регистров, которое использует наша программа.

1) Тогда как мне предоставить калькулятору occupancu количество регистров для каждого потока и общую память для каждого блока?

2) В моей программе я также использую вызовы тяги, которые генерируют код ptx. У меня есть 2 ядра, но я также вижу функции тяги для создания ptx. Поэтому я также учитываю эти числа, когда подсчитываю общее число. регистров я использую? (думаю да!) (то же самое относится и к общей памяти)


person George    schedule 02.05.2014    source источник
comment
Вам придется объяснить первый абзац. Кто мы, и где они говорят, что подробный вывод ptxas не точен?   -  person talonmies    schedule 02.05.2014
comment
@talonmies: я имею в виду, я видел несколько сообщений, в которых говорилось, что вывод ptx не является количеством регистров, используемых ядром. Например, stackoverflow.com/questions/11483321/   -  person George    schedule 02.05.2014
comment
Вы могли его видеть, но явно не читали. Этот вопрос, на который вы ссылались, спрашивает, почему вывод ptxas не согласуется с чьими-то догадками о том, сколько регистров потребуется ядру, основываясь на PTX. Совершенно не относящийся к вашему вопросу.....   -  person talonmies    schedule 02.05.2014
comment
@talonmies: From stackoverflow.com/questions/16975727/ Таким образом, количество регистров, используемых в коде PTX, не имеет значения, поскольку это виртуальные регистры: И некоторые другие подобные сообщения.   -  person George    schedule 02.05.2014
comment
Справа: код PTX. Это не то же самое, что выдает ptxas, который является ассемблером PTX, т.е. он компилирует код PTX в окончательный исполняемый файл. Как я сказал: читайте.   -  person talonmies    schedule 03.05.2014
comment
@talonmies: Хорошо, разницы не заметил   -  person George    schedule 03.05.2014


Ответы (1)


1) Тогда как мне предоставить калькулятору занятости количество регистров для каждого потока и общую память для каждого блока?

Единственное, что нужно, это округление (при необходимости) вывода ptxas до равномерной детализации распределения регистров, которая зависит от устройства (см. ответ Грега здесь) не иметь таблицы детализации распределения регистров по вычислительным возможностям.

Я думаю, что общая память также имеет гранулярность распределения. Поскольку максимальное количество блоков потоков на SM в любом случае ограничено, это должно иметь значение (для занятости), только если ваше распределение/использование находится в пределах гранулярной суммы превышения предела для любого количества блоков, которым вы в противном случае ограничены.

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

2) В моей программе я также использую вызовы тяги, которые генерируют код ptx. У меня есть 2 ядра, но я также вижу функции тяги для создания ptx. Поэтому я также учитываю эти числа, когда подсчитываю общее число. регистров я использую? (думаю да!) (то же самое относится и к общей памяти)

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

person Robert Crovella    schedule 02.05.2014
comment
: Когда вы говорите округление до четной детализации, что вы имеете в виду на практике? Можете ли вы привести пример, предполагающий степень детализации 4? И, во втором вопросе, хорошо, я понимаю, что вы сказали, каждое ядро ​​использует свои ресурсы, но тогда как я могу измерить производительность моей программы, поскольку она использует разные ядра, а также вызывает вызовы, которые сами являются ядрами? Спасибо! - person George; 02.05.2014
comment
Округление: если степень детализации равна 4, а использование регистра ptxas равно 9, я бы округлил до 12 (следующее четное число, кратное 4). Если я получу использование регистра 8, не нужно округлять. 8 уже кратно 4. Как я могу измерить производительность моей программы, это сложный вопрос, который, на мой взгляд, не подходит для SO сам по себе. Это слишком широко. Если у вас есть конкретный вопрос об анализе производительности программы CUDA или CUDA/thrust, опубликуйте новый вопрос SO. Этот вопрос SO на самом деле не имеет ничего общего с измерением производительности. - person Robert Crovella; 02.05.2014
comment
: Хорошо, теперь понятно о степени детализации. Итак, когда я исследую занятость, использование ресурсов и т. д., я делаю это для каждого ядра. Хорошо, спасибо - person George; 02.05.2014