Любой, кто следит за CUDA, вероятно, видел несколько моих запросов относительно проекта, в котором я участвую, но для тех, у кого нет, я подведу итоги.(Извините за длинный вопрос заранее)
Три ядра, одно Генерирует набор данных на основе некоторых входных переменных (имеет дело с битовыми комбинациями, которые могут расти экспоненциально), другой решает эти сгенерированные линейные системы и другое сокращениеядро, чтобы получить окончательный результат.Эти три ядра запускаются снова и снова как часть алгоритма оптимизации для конкретной системы.
На моем компьютере разработчика (Geforce 9800GT, работающем под CUDA 4.0) это работает отлично, все время, независимо от того, чтоЯ добавляю его (до вычислительного предела, основанного на указанной экспоненциальной природе), но на тестовой машине (4xTesla S1070, только одна использовала, в соответствии с CUDA 3.1) точно такой же код (основа Python, интерфейс PyCUDA для ядер CUDA),дает точные результаты для «малых» случаев, но в средних случаях этап решения не выполняется на случайных итерациях.
Предыдущие проблемы, с которыми я сталкивался в этом коде, были связаны с числовой нестабильностью проблемы и носили детерминистский характер (т. Е. Каждый раз приводил к ошибке на одной и той же стадии), но эта проблема, откровенно говоря,злит меня, потому что он потерпит неудачу, когда захочет.
Поэтому у меня нет надежного способа вырвать код CUDA из среды Python и выполнить надлежащую отладку, а поддержка отладчика PyCUDAсомнительно, если не сказать больше.
Я проверил обычные вещи, такие как проверка перед запуском ядра свободной памяти на устройстве, и вычисления занятости говорят, что распределение сетки и блоков в порядке.Я не делаю никаких сумасшедших вещей, специфичных для 4.0, я освобождаю все, что выделяю на устройстве на каждой итерации, и я исправил все типы данных как плавающие.
TL; DR , Кто-нибудь сталкивался с какими-либо хитростями, касающимися CUDA 3.1, которых я не видел в примечаниях к выпуску, или какими-либо проблемами со средой управления памятью PyCUDA, которые приводили к прерывистым сбоям при повторных вызовах?