Код CUDA дает неправильный результат в режиме релиза
Мой код CUDA дает правильный результат в режиме отладки. Однако в режиме выпуска тот же код выдает результаты мусора. Может ли синхронизация между потоками вести себя по-разному между режимами отладки и выпуска?
2 ответа
Код, сгенерированный с -O0, приводит к менее оптимальному коду и значительно большему количеству обращений к глобальной и локальной памяти, что может скрывать состояние гонки. Если вы считаете, что у вас может быть состояние гонки в разделяемой памяти, вы можете попробовать новую программу проверки памяти CUDA 5.0, которая поддерживает некоторые формы обнаружения состояния гонки. Лучше всего искать в любом месте, где вы разделяли память между двумя потоками, и определять, отсутствует ли у вас забор потоков потоков синхронизации.
Я думаю, у тебя проблема с состоянием гонки. Вы можете реорганизовать свой код и добавить синхронизацию там, где это необходимо. В режиме отладки ваши потоки обычно выполняются по порядку, и вы не можете решить эту проблему.