2013-08-07 4 views
0

Я хотел бы выбрать треугольники из массива, удовлетворяющего определенным критериям. Как бы я сделал что-то подобное в CUDA?Выбор элементов массива с использованием cuda

Вход представляет собой массив треугольников. Затем CUDA вычисляет значение для каждого треугольника. Выход должен быть массивом, состоящим из тех треугольников, где значение меньше порогового значения 2, например.

triangle array:  [tri1][tri2][tri3][tri4] 
value array:  [1.00][0.50][3.50][0.50] 
-> pick triangles with value <= 2 
output:    [tri1][tri2][tri4] 

Я не уверен, как оптимально использовать кудас-параллелизм в этом случае.

На данный момент я считываю массив значений обратно в математику и использую Cases [] для выбора треугольников, которые слишком медленны.

result = CUDAMemoryGet[cOutput]; 
validTriangleIndices = Cases[Range[Length[result]], x_ /; result[[x]] < threshold]; 
+1

Что такое «треугольник» в вашем примере использования? Является ли это структурой или векторным типом того, что. Подробности имеют значение, и я не уверен, что вы достаточно подробно описали свою проблему, чтобы ответить на этот вопрос. – talonmies

ответ

3

Как говорится в @talonmies, вы не предоставили достаточного количества информации в своем вопросе для получения полного ответа. Однако то, что вы описываете, звучит как подходящее для Thrust алгоритм copy_if. Выезд this example.

+0

Спасибо, что указали на метод copy_if. Это привело меня к функции atomicAdd(), которую я могу использовать для получения индекса для нового массива, где я могу хранить правильные треугольники. – Markus

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