Я довольно новичок в разработке CUDA, и я пытаюсь сортировать массив структур, используя метод сортировки библиотеки тяги. Моя структура выглядит так:Как использовать массив struct в thrust :: sort?
#define N 307200
struct distanceVector {
Point3D a, b;
float distance;
};
Я хочу, чтобы отсортировать массив на «расстоянии», однако, функция сортировки требует два итераторов произвольного доступа и с тех пор я не использую векторы у меня нет никакого. Я пытался сделать что-то вроде этого:
bool distance_sort(distanceVector A, distanceVector B){
return (A.distance > B.distance);
}
distanceVector * MyStructArray;
cudaMalloc((void**)&MyStructArray, sizeof(distanceVector) * N);
//LAUNCH KERNEL WHICH FILLS MYSTRUCTARRAY AND THEN...
thrust::sort(MyStructArray, MyStructArray + N, distance_sort);
... который я видел, как, например, в [руководство упорных в] [1]:
#include <thrust/sort.h>
#include <thrust/functional.h>
...
const int N = 6;
int A[N] = {1, 4, 2, 8, 5, 7};
thrust::stable_sort(A, A + N, thrust::greater<int>());
// A is now {8, 7, 5, 4, 2, 1}
Хотя он собирает, во время выполнения я получаю Msgstr "Точка обнаружения нарушения доступа 0x405e041c." ошибка. При отладке приложения останавливается на этом участке в файле insertion_sort.h:
for(RandomAccessIterator i = first + 1; i != last; ++i)
{
value_type tmp = *i;
if (wrapped_comp(tmp, *first)).......
Есть ли способ решить эту проблему без использования векторов упорных в?
Покажите, как вы определяете 'N' и' MyStructArray'. –
Я добавил изменения, которые вы предложили – Pepedou