Результаты программы Cuda всегда равны нулю в HW, верно в EMU? - PullRequest
0 голосов
/ 21 мая 2010

У меня странная проблема .. Я написал код CUDA, который корректно выполняется в эмуляции, и все результаты отображаются .. однако при выполнении на аппаратном обеспечении "G210" .. результаты в памяти результатов всегда равны 0

Я передаю два вектора в ядро, один со случайными переменными, другой инициализируется нулем, код копирует первый вектор в общую память, выполняет некоторые операции обмена и другие операции, а затем записывает результаты на второй вектор один с начальными 0)

Я использую двойную точность, используется флаг -arch sm13, все выделения памяти также используют sizeof (double) ..

Я проверил, вызывается ли ядро, оно работает .. так что никаких проблем здесь ... cudaMemCpy не имеет проблем ..

в чем может быть проблема .. :( почему бы работать в эмуляции, а не на HW

Я совсем запутался .. есть идеи?

Ответы [ 3 ]

2 голосов
/ 21 мая 2010

Если я правильно помню, GeForce 210 не поддерживает Compute Capability 1.3, то есть не поддерживает double.

Попробуйте переписать свой код, чтобы использовать синглы, скомпилируйте с -arch = sm_12.

1 голос
/ 21 мая 2010

В эмуляции используется другой компилятор, вся память находится на хосте, работает только один поток и т. Д. Если вы обнаружили ошибку в эмуляции, вы нашли ошибку в своем коде. Если это работает в эмуляции, это не значит, что у вас нет ошибок. Ваш вопрос в основном, у меня глючный код, в чем моя ошибка?

Совет: проверьте возвращаемые значения для всего. Узнайте, как сделать проверку ошибок. Поймите, что ошибки на устройстве могут отображаться асинхронно по отношению к коду процессора. Используйте отладчик (возможно, купите дешевый дешевый nvidia GPU, чтобы сделать это проще). Попробуйте Cuprintf, если вы предпочитаете отладку printf (доступно на форумах cuda). Обратитесь за помощью на форумах nvidia cuda. ​​

1 голос
/ 21 мая 2010

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

...