CUDA Использование переменной в функции устройства дает ошибку - PullRequest
0 голосов
/ 15 апреля 2020

У меня действительно странная проблема в моем проекте cuda. У меня есть такая функция устройства:

__host__ __device__ Vector4 returnCollision(Vector3 rayPoint, Vector3 rayDirection) {

float x = rayPoint.x - position.x;
        float y = rayPoint.y - position.y;
        float z = rayPoint.z - position.z;
        float t1 = x * x + y * y + z * z - radius * radius;
        float t2 = 2 * (rayDirection.x * x + rayDirection.y * y + rayDirection.z * z);
        float t3 = rayDirection.x * rayDirection.x + rayDirection.y * rayDirection.y + rayDirection.z * rayDirection.z;
        float d = t2 * t2 - 4 * t3 * t1;
        float t = 0;
        float tt = 0;
        return Vector4();
    }

Этот код работает правильно, что я ожидаю. Но после добавления этой строки в мой код перед строкой возврата выдается ошибка синхронизации:

if (d < 0)
{
    return Vector4();
}

* После этой строки строка возврата Vector4 () все еще существует.

После строки ниже cudaStatus равняется 700, и это означает ошибку:

cudaStatus = cudaDeviceSynchronize();

*** Редактировать: Я действительно понял много странных вещей тоже. Если я изменю эту строку:

float t1 = x * x + y * y + z * z - radius * radius;

К этой строке:

float t1 = x;

Это снова выдаст ту же ошибку. Действительно странно!

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