У меня действительно странная проблема в моем проекте 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;
Это снова выдаст ту же ошибку. Действительно странно!