CUDA на Thrust: как реализовать приоритетную очередь - PullRequest
3 голосов
/ 21 ноября 2010

Мой план состоит в том, чтобы рассчитать матрицу расстояний, используя корреляцию Пирсона, и получить q-ближайших соседей для каждого узла (q = ln (n)) из матрицы расстояний и поместить их в вектор результатов.Я сделал это в C ++, используя очередь приоритетов STL внутри цикла функции корреляции.

Но как вы думаете, есть ли способ сделать это в GPU?

  1. Может кто-нибудь помочь мне, как я могу сделать то же самое в GPU (вероятно, Тяга будет проще для меня!)
  2. Как реализовать очередь с приоритетами в графическом процессоре?

Вот мой код процессора (C ++ STL):

Например,

      distance matrix
-----------------------
 0 3 2 4
 3 0 4 5
 2 4 0 6
 .....

output in a object vector
=================

    source  target  weight
--------------------------------
0 2 2
0 1 3  ....    (sorted by Edge weight)

1 0 3
1 2 4

2 0 2
.....


calculatePearsonCorrelation(float  vector1[], float vector2[], int m) {
               // float distancePearson(vector vector1, vector vector2){

                            int i;
                            float a=0,b=0,c=0,d=0, e = 0, sumX=0, sumY=0;

                            //m = vector1.size();

                            for(i=0;iq){
                        MIN=pqx.top().get_corr();
                        if(corr::iterator it = qNNVector.begin(); it!=qNNVector.end(); ++it) {
            fout 

1 Ответ

1 голос
/ 01 марта 2011

Вы пытались использовать Thrust's sort ?Вы можете просто прочитать первые q элементов.Если элементов достаточно, вы, вероятно, увидите приличное ускорение.

...