тяга и автоматическая передача данных

#python #c #thrust

Вопрос:

У меня есть функция в библиотеке, которой нужно работать с данными, поступающими из python

Сначала я создаю кортеж vec3

 typedef thrust::tuplelt;double,double,doublegt; vec3;  
 void thrust_decimation( double* x, double* y, double* z, long number_of_vertex) {  auto data2workwith=thrust::make_tuple(x, y,z);   std::vectorlt;vec3gt; local(number_of_vertex);    for (int64_t i = 0; i lt; number_of_vertex; i  )  {  local[i]= vec3(x[i],y[i],z[i]);  }    thrust::device_vectorlt;vec3gt; keys1 =local;  thrust::device_vectorlt;vec3gt; keys2(number_of_vertex);   thrust::sort(keys1.begin(), keys1.end());    thrust::transform(keys1.begin(), keys1.end(), keys2.begin(), gridTransform(gridscale));     ... work with local  ... work on x, y, z  ... return x, y z  }  

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

Комментарии:

1. Я в замешательстве. Вам были переданы УКАЗАТЕЛИ на двойников, а не на двойников. data2workwith не относится к тому же типу, что и vec3. Кроме того, что такое «тяга»? Это ваш код?

2. Я добавляю часть кода, работающего с данными @Jellyboy

3. @Jellyboy Thrust-это параллельная замена STL с поддержкой GPU, которая поставляется вместе с набором инструментов CUDA.

4. Я бы рекомендовал использовать thrust::zip_iterator , что означает, что вы не переводите из SoA в AoS, а вместо этого используете три thrust::device_vectorlt;doublegt; вектора x_d y_d и z_d , которые затем объединяются в один итератор , который дает эти vec3 кортежи при разыменовании. Таким образом, вам не нужно создавать копию в памяти хоста.

5. Спасибо @PaulG, я попробую это решение.