⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vout1d.br

📁 用于GPU通用计算的编程语言BrookGPU 0.4
💻 BR
📖 第 1 页 / 共 3 页
字号:
   }else if (whichmod==4) {
      output=input4[newindex];
   }else if (whichmod==5) {
      output=input5[newindex];
   }else if (whichmod==6) {
      output=input6[newindex];
   }else {
      output=input7[newindex];
   }
}
*/
void combineStreamsHelper1dBRT_TYPE (BRT_TYPE (**streams) <>,
                                unsigned int num,
                                BRT_TYPE output<>,
                                float modulus,
                                float offset) {
   switch (num) {
   case 1:
      BRT_TYPE1dstreamCombine1(*streams[0],
                     modulus,
                     offset,
                     output,
                     output);
      break;
   case 2:
      BRT_TYPE1dstreamCombine2(*streams[0],
                     *streams[1],
                     modulus,
                     offset,
                     output,
                     output);
      break;
   case 3:
      BRT_TYPE1dstreamCombine3(*streams[0],
                     *streams[1],
                     *streams[2],
                     modulus,
                     offset,
                     output,
                     output);
      break;
   case 4:
   default:
      BRT_TYPE1dstreamCombine4(*streams[0],
                     *streams[1],
                     *streams[2],
                     *streams[3],
                     modulus,
                     offset,
                     output,
                     output);
      if (num>4) {
         combineStreamsHelper1dBRT_TYPE(streams+4,
                                      num-4,
                                      output,
                                      modulus,
                                      4+offset);
      }
      /*
   case 5:
      BRT_TYPEstreamCombine5(streams[0],
                     *streams[1],
                     *streams[2],
                     *streams[3],
                     *streams[4],
                     modulus,
                     offset,
                     output,
                     output);
      break;
   case 6:
      BRT_TYPEstreamCombine6(*streams[0],
                     *streams[1],
                     *streams[2],
                     *streams[3],
                     *streams[4],
                     *streams[5],
                     modulus,
                     offset,

                     output,
                     output);
      break;
   default:
      BRT_TYPEstreamCombine7(*streams[0],
                     *streams[1],
                     *streams[2],
                     *streams[3],
                     *streams[4],
                     *streams[5],
                     *streams[6],
                     modulus,
                     offset,

                     output,
                     output);
      if (num>7) {
         combineStreamsHelper1dBRT_TYPE(streams+7,
                                      num-7,
                                      output,
                                      modulus,
                                      7+offset);         
      } 
      */     
   }
}
void combineStreams1dBRT_TYPE (BRT_TYPE (**streams)<>,
                          unsigned int num,
                          unsigned int width, 
                          unsigned int UNUSED,
                               BRT_TYPE (*output)<>) {
   BRT_TYPE tmp<(num*width)>;
   streamSwap(tmp,*output);
   switch (num) {
   case 0:
      return;
   case 1:
      streamSwap(*output,*streams[0]);
      break;
   case 2:
      BRT_TYPE1dstreamCombine2f(*streams[0],
                      *streams[1],
                      (float)num,
                      *output);
      break;
   case 3:
      BRT_TYPE1dstreamCombine3f(*streams[0],
                      *streams[1],
                      *streams[2],
                      (float)num,
                      *output);
      break;
   case 4:
      BRT_TYPE1dstreamCombine4f(*streams[0],
                      *streams[1],
                      *streams[2],
                      *streams[3],
                      (float)num,
                      *output);
      break;
   case 5:
   default:
      BRT_TYPE1dstreamCombine5f(*streams[0],
                      *streams[1],
                      *streams[2],
                      *streams[3],
                      *streams[4],
                      (float)num,
                      *output);
      if (num>MAX_VOUT_STREAMS) {
         fprintf (stderr,
                  "vout stream not reconstituted properly. %s%d streams",
                  "Too little precision for more than ",MAX_VOUT_STREAMS);
      }
      if (num>5) {
         combineStreamsHelper1dBRT_TYPE(streams+5,
                                      num-5,
                                      *output,
                                      (float)num,
                                      (float)(5-.5));
      }
      /*
      break;
   case 6:
      BRT_TYPEstreamCombine6f(*streams[0],
                      *streams[1],
                      *streams[2],
                      *streams[3],
                      *streams[4],
                      *streams[5],
                      num,
                      output);
      break;
   case 7:
      BRT_TYPEstreamCombine7f(*streams[0],
                      *streams[1],
                      *streams[2],
                      *streams[3],
                      *streams[4],
                      *streams[5],
                      *streams[6],
                      num,
                      output);
      break;
   default:
      if (num>MAX_VOUT_STREAMS) {
         fprintf (stderr,
                  "vout stream not reconstituted properly. %s%d streams",
                  "Too little precision for more than ",MAX_VOUT_STREAMS);
      }
      BRT_TYPEstreamCombine8f(*streams[0],
                      *streams[1],
                      *streams[2],
                      *streams[3],
                      *streams[4],
                      *streams[5],
                      *streams[6],
                      *streams[7],
                      num,
                      output);
      if (num>8) {
         combineStreamsHelperBRT_TYPE(streams+8,
                                      num-8,
                                      output,
                                      num,
                                      8);
      }
      break;
      */
   }
}




kernel void combineBRT_TYPE1d (BRT_TYPE input1[], 
                           BRT_TYPE input2[], 
                           out BRT_TYPE output<>,
                           float startsecond,
                           float endsecond,
                           float maxinput2value,
                           float inf){
   if ((indexof output).x>=startsecond.x) {
      float secondindex=(indexof output).x-startsecond;
      //getIndexAt(float4(maxinputvalue.x,maxinputvalue.y-1,0,0),
      //           -shift2,
      //           maxinput1value,
      //           endsecond); // moved outside kernel
      if (secondindex.x>=endsecond.x) {
         output=inf;
      }else {
         output = input2[secondindex];
      }
   }else {
      output=input1[(indexof output).x];
   }
}

unsigned int  voutCombineBRT_TYPE1d(BRT_TYPE outleft_stream<>,
                               float maxshiftleft,
                               unsigned int LEFTWIDTH,
                               BRT_TYPE outright_stream<>,
                               float maxshiftright,
                               unsigned int RIGHTWIDTH,
                                    BRT_TYPE (*output)<>){
   unsigned int totalsize;
   float maxleftvalue,maxrightvalue;
   maxleftvalue=(float)LEFTWIDTH;
   maxrightvalue=(float)RIGHTWIDTH;
   totalsize = (LEFTWIDTH
                +RIGHTWIDTH
                -(unsigned int)maxshiftleft-(unsigned int)maxshiftright);
   if (1) {      
      unsigned int width = totalsize;
      BRT_TYPE output_stream<width>;
      float startsecond,endsecond;
      cpuGetIndexAt1d(maxleftvalue-1,
                    -maxshiftleft,
                    maxleftvalue,
                    &startsecond);
      cpuGetIndexAt1d(maxrightvalue-1,
                    -maxshiftright,
                    maxrightvalue,
                    &endsecond);
      combineBRT_TYPE1d(outleft_stream,
                   outright_stream,
                   output_stream,
                   startsecond,
                   endsecond,
                   maxrightvalue,
                   1.0f/absolutezero);
      streamSwap (*output,output_stream);
   }
   return totalsize;
}

unsigned int totalCombineVoutBRT_TYPE1d (BRT_TYPE list_stream<>, 
                                    unsigned int WIDTH,
                                    BRT_TYPE list2_stream<>,
                                    unsigned int WIDTH2,
                                         BRT_TYPE (*output)<>){

   float outleft_stream<WIDTH>;
   float outright_stream<WIDTH2>;
   float maxshiftleft =shiftValues1dBRT_TYPE(list_stream,
                                           &outleft_stream,
                                           WIDTH,1,
                                           -1);
   float maxshiftright=shiftValues1dBRT_TYPE(list2_stream,
                                           &outright_stream,
                                           WIDTH2,1,
                                           -1);
   return voutCombineBRT_TYPE1d (outleft_stream,
                            maxshiftleft,
                               WIDTH,
                            outright_stream,
                            maxshiftright,
                               WIDTH2,
                            output);
}
#undef VECTOR_TEMPLATIZED_FUNCTIONS





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -