2012-06-16 3 views
1

У меня есть ядро ​​с помощью простого объявления массива и инициализации, а также дополнительную функцию «get_smooth_vertex (...)», который я изменился так, чтобы продемонстрировать проблему:OpenCL Массив Индексация Кажется Сломанный

//More const __constant declarations 
const __constant int edge_parents[12][2] = { {0,1}, {0,2}, {1,3}, {2,3}, {0,4}, {1,5}, {2,6}, {3,7}, {4,5}, {4,6}, {5,7}, {6,7} }; 
//More Functions 
float3 get_smooth_vertex(const int edge_index, const float* cube_potentials) { 
    int i1 = edge_parents[edge_index][0]; 
    int i2 = edge_parents[edge_index][1]; 
    if (i1==i2) return (float3)(0);\n" 
    return (float3)(1);\n" 
} 
__kernel void march(const __global float* potentials, __global float* vertices, __global float* normals, const __constant float4* points, const int numof_points) { 
    //Lots of stuff. 
    //Call get_smooth_vertex(...) a few times 
    //More stuff. 
} 

Путь if в "get_smooth_vertex (...)" всегда кажется выполненным! Теперь я не могу представить, почему это было бы, потому что каждая пара в «edge_parents» отличается. Я проверил «edge_index», и он всегда> = 0 и всегда < = 11. Кроме того, ни одна из переменных не имеет псевдонима в глобальной или локальной области. Ядро (и хост-код, FWIW) компилируется без предупреждений или ошибок.

Итак, я не могу понять, что не так - почему индексы равны друг другу? Возможно, выравнивание? Я просто полностью забываю, как работает С или что-то еще? Посмотрите - это будет ошибка королевского пользователя. , ,

Спасибо,
Ян

ответ

2

Я проверил ваш код и сравнение работает просто отлично (после снятия задней \n"). Вероятно, вы допустили ошибку при оценке возвращаемого значения get_smooth_vertex(). Но это сложно сказать без кода, который показывает, как он называется.

+0

В этом случае я просто вывел результат напрямую; поэтому было довольно сложно неправильно интерпретировать. На практике, поскольку таблица была настолько мала, я переписал ее, чтобы использовать оператор switch, который исправил проблему и, вероятно, быстрее в любом случае: P – imallett

Смежные вопросы