CUDA优化问题

时间:2010-11-07 00:03:37

标签: optimization cuda

这是一个简单的程序:

   void multiply(const int* v_in, const int* w_in, int n_v, int n_w, int* w_out)
   {
      for(int i=0; i<n_w; i++)
      {
         int sum=0;
         for(int j=0; j<n_v; j++)
            sum += (w_in[i]*v_in[j])>>1;
         w_out[i]=sum;
      }
   }

设定n_v,n_w~10 ^ 6。显然,在CUDA中至少有十几种等效的方法可以用不同的方式将(n_v * n_w)操作细分为线程,有和没有共享内存......从理论上讲,哪种方式应该是最快的?

1 个答案:

答案 0 :(得分:0)

简单的:

   void multiply(const int* v_in, const int* w_in, int n_v, int n_w, int* w_out)
   {
      int *v = shared; // dynamic
      for(int i = block.rank; i < n_w; i += block.size)
      {
         int w = w_in[i]; // coalesced
         int sum=0;
         for(int j=0; j<n_v; j += block.size) { // assumption
            v[block.rank] = v_in[j+block.rank];
            __synch();
            for(int k = 0; k < block.size; ++k) 
                sum += (w*v[k])>>1;  // 
            __synch(); // ouch
         }
         w_out[i] = sum; // ditto
      }
   }