2010-11-21 3 views
3

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

Как вы считаете, есть ли способ сделать это в GPU?

  1. Может кто-нибудь помочь мне, как я могу сделать то же самое в GPU (возможно Thrust будет легче для меня!)
  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

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

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

  • Нет связанных вопросов^_^