Как вызвать функции CUDA вне main ()? - PullRequest
0 голосов
/ 18 августа 2011

Я очень новичок в программировании на CUDA, и мне НЕ было трудно все это настроить. Я использую драйвер API, я изменил рабочий процесс компиляции, и все мои учебные ядра и программы хоста работают отлично. Я учусь непосредственно на исходных примерах cuda, поскольку SDK полагается в основном на них. Все просто идеально.

Но я пытаюсь расширить свои программы с примера классической консоли на графический интерфейс, и мне трудно вызывать любую функцию cuda, кроме классической функции main (). Я нахожусь под Win32, и любой вызов за пределами main () приводит к «нарушению доступа», вызов ядра или функции запроса устройства внутри main () работает нормально, программа gui тоже работает нормально. Это происходит со всеми вызовами API, включая cuInit (), поэтому сделать контексты актуальными, контексты push и popping невозможно. Если вы посмотрите на примеры SDK, все они закодированы в main ().

Кто-нибудь знает об этой проблеме? Это случается и с тобой? Как это исправить?

Большое спасибо за ваши комментарии заранее.

INFO:

  • Версия CUDA SDK: 4.0
  • Устройство: GeForce GTS 450 (GF106), возможность устройства 2.1
  • Платформа Win32 (Win7 x64 с WOW64).
  • API-интерфейс драйвера CUDA
  • Хост-программа с языком программирования D.

1 Ответ

1 голос
/ 18 августа 2011

Существуют тысячи программ, которые используют CUDA совершенно за пределами main, проблема, скорее всего, заключается в том, что ваша программа написана на D, а не на C / C ++. Это не значит, что он не может работать (я никогда не использовал D), но вам нужно помнить, что вы вызываете API C и что C неуправляем.

...