zoukankan      html  css  js  c++  java
  • cuda float atomic操作

    atomic add.用第二个,暂时还没弄明白

    #ifdef FLOAT
      #define T float
    #else
      #define T int
    #endif
    
    #ifdef FORUM
    __device__ inline void atomicAdd(float *address, float val){
          int i_val = __float_as_int(val);
          int tmp0 = 0;
          int tmp1;
          while( (tmp1 = atomicCAS((int *)address, tmp0, i_val)) != tmp0)  {
                  tmp0 = tmp1;
                  i_val = __float_as_int(val + __int_as_float(tmp1));
          }
    }
    #else
    __device__ inline float atomicAdd(float* address, float value){
      float old = value;  
      float ret=atomicExch(address, 0.0f);
      float new_old=ret+old;
      while ((old = atomicExch(address, new_old))!=0.0f){
        new_old = atomicExch(address, 0.0f);
        new_old += old;
      }
      return ret;
    };
    #endif

    atomic min

    __device__ float fatomicMin(float *addr,float value){
              float old = *addr, assumed;
              if(old<=value) return old;
              do {
                         assumed = old;
                         old = atomicCAS((int*)addr, __float_as_int(assumed), __float_as_int(MIN(value, assumed)));
              }while(old!=assumed);
              return old;
    };
  • 相关阅读:
    centos6.8防火墙模块未加载
    CentOS6.8下安装Redis
    CentOS6.8下安装mysql
    git使用手册
    oracle锁表与解表
    原生js(二)
    原生js(一)
    学习计划调整
    jQuery Sizzle选择器(三)
    jQuery Sizzle选择器(二)
  • 原文地址:https://www.cnblogs.com/redips-l/p/6952414.html
Copyright © 2011-2022 走看看