эмуляция CUDA-трассировки - Нужно некоторое понимание эксперта - PullRequest
1 голос
/ 15 октября 2011

Я работаю над инструментом эмуляции трассировки GPU в Windows в рамках своей исследовательской работы в аспирантуре. Я работаю над эмуляцией трассировки CUDA, чтобы быть конкретным.

Я использую простое внедрение DLL, используя MS Detours, чтобы включить перехват API CUDA. Я храню вызовы API и их параметры в файле трассировки. У меня возникают некоторые проблемы при попытке эмулировать API из моего файла трассировки (я использую слово воспроизведения, чтобы обозначить это действие)

Типичный файл трассировки начинается с вызова __cudaRegisterFatBinary и __cudaRegisterFunction. Затем следует вызов cudaMalloc.

Что я сделал?

1) Я наткнулся на знаменитый GPUOcelot и обнаружил структуру кубинов, которую сейчас использует Nvidia. Я использую это для сохранения параметра адреса cudaRegisterFatBinary в режиме перехвата, и я использую указатель в воспроизведении для _cudaRegisterFatBinary путем повторного заполнения структуры в памяти.

2) В _cudaRegisterFunction я не уверен, к чему относятся параметры hostFunction, Device Function и Device Name. Я имею в виду, я не понимаю, как я мог заполнить его при воспроизведении из моего файла трассировки. Я просто сохраняю указатель из исходного исполнения и использую его для имитации вызова. Но нет никакого способа узнать, проходит ли функция нормально, так как она не имеет возвращаемого значения.

3) cudaMalloc после этих двух функций точки входа возвращает код ошибки cuda 11. Это недопустимое значение cuda согласно документации Nvidia. Я понятия не имею, почему это должно иметь место. Я предполагаю, что что-то не так с предыдущими двумя вызовами функций. У меня также есть ощущение, что что-то не так с неявным созданием первичного контекста во время выполнения cuda. Может кто-нибудь дать мне некоторое представление о выполнении cuda во время выполнения и указать, что мне может не хватать?

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

Я очень ценю ваше время и интерес!

1 Ответ

1 голос
/ 17 октября 2011

Звучит очень интересно в целом.Ваше «Ошибка: неверное значение Cuda» может быть связано с параметрами _cudaRegisterFunction.Параметр «DeviceName» звучит так, как будто он определяет, какую графическую карту (карту?) Использовать.Проверьте CUDA SDK, есть много демонстраций, которые перечисляют графические процессоры в системе, возможно, эти значения действительны для «DeviceName».Что касается «hostFunction» и «deviceFunction», они звучат как идентификаторы функций или, возможно, указатели функций.Кроме того, вы можете вызвать 'cudaGetLastError ()', чтобы проверить, был ли вызов функции успешным (он возвращает 'cudaSuccess', если все в порядке ... взгляните на макросы регистрации ошибок в SDK).Удачи!

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