CUDA: Могу ли я узнать, есть ли у меня глобальное слияние памяти? - PullRequest
2 голосов
/ 30 июня 2011

Я использую GeForce GTX 580 (вычислительные возможности 2.0).

В моей программе я подозреваю, что узким местом является доступ к глобальной памяти в ядре. Я подозреваю, что это связано с тем, что все вычисления включают числа, полученные путем индексации массива, хранящегося в глобальной памяти, и потому что переключение с двойной точности на одинарную точность только повышает производительность примерно на 10%. (afaik должно быть в два раза быстрее с устройством fermi, если операции с плавающей запятой являются узким местом (?))

Итак, чтобы исправить это узкое место, я подумал о слиянии памяти. Проблема здесь в том, что я не знаю, достиг ли я этого или нет. Либо он у меня уже есть, и это так же хорошо, как и работает (в 25 раз быстрее, чем последовательная версия для Intel i7), или я могу заставить его работать намного быстрее, переписав его, чтобы получить слияние.

Но есть ли способ узнать? Могу ли я как-то «отключить» коалесценцию, чтобы узнать, или узнать по-другому?

Ответы [ 2 ]

2 голосов
/ 30 июня 2011

Профилировщик CUDA Visual покажет вам эффективность загрузки / хранения каждого ядра в сводной таблице;Grizzly дал хороший ответ о том, как это изменилось в новых картах: Вычислить поля Prof для непоследовательных и когерентных gst / gld?(CUDA / OpenCL)

1 голос
/ 30 июня 2011

Нет, объединение памяти - это не то, что вы включаете или выключаете, а то, чего вы добиваетесь, используя правильные схемы доступа к памяти и выравнивание. Я не уверен, поскольку я никогда не использовал (не работает в Windows), но я думаю, что Parallel Nsight от nVidia может сказать вам, слиты ваши обращения к памяти или нет.

...