cublas中是否有可以将Sigmoid函数与矢量一起应用的函数?

xiaofei

就像标题所说的那样,我想用一个函数在向量中进行元素操作,我想知道cublas库中有没有函数可以做到这一点?

恩朱法

我不知道合适的CUBLAS功能可以协助完成此任务。但是,您可以轻松地编写自己的代码,以将S形函数或与此相关的任何其他单参数函数逐个元素地应用于向量。请注意,在大多数情况下,此类代码将是内存绑定的,而不是计算绑定的。有关示例,请参阅下面的CUDA程序sigmoid_kernel()程序的输出应如下所示:

source[0]= 0.0000000000000000e+000  source[99999]= 9.9999000000000005e-001
result[0]= 5.0000000000000000e-001  result[99999]= 7.3105661250612963e-001

#include <stdlib.h>
#include <stdio.h>
#include <math.h>

#define DEFAULT_LEN   100000

// Macro to catch CUDA errors in CUDA runtime calls
#define CUDA_SAFE_CALL(call)                                          \
do {                                                                  \
    cudaError_t err = call;                                           \
    if (cudaSuccess != err) {                                         \
        fprintf (stderr, "Cuda error in file '%s' in line %i : %s.\n",\
                 __FILE__, __LINE__, cudaGetErrorString(err) );       \
        exit(EXIT_FAILURE);                                           \
    }                                                                 \
} while (0)

// Macro to catch CUDA errors in kernel launches
#define CHECK_LAUNCH_ERROR()                                          \
do {                                                                  \
    /* Check synchronous errors, i.e. pre-launch */                   \
    cudaError_t err = cudaGetLastError();                             \
    if (cudaSuccess != err) {                                         \
        fprintf (stderr, "Cuda error in file '%s' in line %i : %s.\n",\
                 __FILE__, __LINE__, cudaGetErrorString(err) );       \
        exit(EXIT_FAILURE);                                           \
    }                                                                 \
    /* Check asynchronous errors, i.e. kernel failed (ULF) */         \
    err = cudaThreadSynchronize();                                    \
    if (cudaSuccess != err) {                                         \
        fprintf (stderr, "Cuda error in file '%s' in line %i : %s.\n",\
                 __FILE__, __LINE__, cudaGetErrorString( err) );      \
        exit(EXIT_FAILURE);                                           \
    }                                                                 \
} while (0)

__device__ __forceinline__ double sigmoid (double a)
{
    return 1.0 / (1.0 + exp (-a));
}

__global__ void sigmoid_kernel (const double * __restrict__ src, 
                                double * __restrict__ dst, int len)
{
    int stride = gridDim.x * blockDim.x;
    int tid = blockDim.x * blockIdx.x + threadIdx.x;
    for (int i = tid; i < len; i += stride) {
        dst[i] = sigmoid (src[i]);
    }
}    

int main (void)
{
    double *source, *result;
    double *d_a = 0, *d_b = 0;

    int len = DEFAULT_LEN;

    /* Allocate memory on host */
    source = (double *)malloc (len * sizeof (source[0]));
    if (!source) return EXIT_FAILURE;
    result = (double *)malloc (len * sizeof (result[0]));
    if (!result) return EXIT_FAILURE;

    /* create source data */
    for (int i = 0; i < len; i++) source [i] = i * 1e-5;

    /* spot check of source data */
    printf ("source[0]=% 23.16e  source[%d]=% 23.16e\n", 
            source[0], len-1, source[len-1]);

    /* Allocate memory on device */
    CUDA_SAFE_CALL (cudaMalloc((void**)&d_a, sizeof(d_a[0]) * len));
    CUDA_SAFE_CALL (cudaMalloc((void**)&d_b, sizeof(d_b[0]) * len));

    /* Push source data to device */
    CUDA_SAFE_CALL (cudaMemcpy (d_a, source, sizeof(d_a[0]) * len,
                                cudaMemcpyHostToDevice));

    /* Compute execution configuration */
    dim3 dimBlock(256);
    int threadBlocks = (len + (dimBlock.x - 1)) / dimBlock.x;
    if (threadBlocks > 65520) threadBlocks = 65520;
    dim3 dimGrid(threadBlocks);

    sigmoid_kernel<<<dimGrid,dimBlock>>>(d_a, d_b, len);
    CHECK_LAUNCH_ERROR();

    /* retrieve results from device */
    CUDA_SAFE_CALL (cudaMemcpy (result, d_b, sizeof (result[0]) * len,
                                cudaMemcpyDeviceToHost));

    /* spot check of  results */
    printf ("result[0]=% 23.16e  result[%d]=% 23.16e\n", 
            result[0], len-1, result[len-1]);

    /* free memory on host and device */
    CUDA_SAFE_CALL (cudaFree(d_a));
    CUDA_SAFE_CALL (cudaFree(d_b));
    free (result);
    free (source);

    return EXIT_SUCCESS;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

cublas中是否有可以将S型函数应用于矢量的函数?

来自分类Dev

是否可以将预测函数与 r 中的随机森林模型一起使用?

来自分类Dev

是否可以将std :: sort与需要额外参数的sort函数一起使用?

来自分类Dev

是否可以将typeof与泛型函数一起使用?

来自分类Dev

是否可以将Oracle的用户定义的聚合函数定义为与两列一起使用?

来自分类Dev

Kotlin将函数与数据类一起应用

来自分类Dev

将函数与group-by一起应用于data.table的所有列

来自分类Dev

将函数与group-by一起应用于data.table的所有列

来自分类Dev

我可以将DT软件包与RShiny中的tabsetpanel函数一起使用吗?

来自分类Dev

将callCC与R中的高阶函数一起使用

来自分类Dev

将malloc与函数中的结构一起使用

来自分类Dev

可以与具有不同类型签名的函数一起使用的函数

来自分类Dev

将嵌套函数与事件监听器一起使用是否有任何问题?

来自分类Dev

Openlayers 3中可以与feature.getStyle()函数一起使用的函数是什么?

来自分类Dev

将 Like 函数与 CDate 函数一起使用

来自分类Dev

是否可以将用户定义的聚合(clr)与窗口函数一起使用?

来自分类Dev

是否可以将NewRelic与混合移动应用程序一起使用?

来自分类Dev

是否可以部署将Python 3.4与Fabric一起使用的应用程序?

来自分类Dev

是否可以将Java WebSocket与桌面应用程序一起使用?

来自分类Dev

是否可以将NAudio.Lame与Xamarin(Android / iOS)应用程序一起使用?

来自分类Dev

是否可以部署将Python 3.4与Fabric一起使用的应用程序?

来自分类Dev

是否可以将Java WebSocket与桌面应用程序一起使用?

来自分类Dev

是否可以将AWS SES与HEROKU上的应用程序一起使用?

来自分类Dev

是否可以托管将 Firestore 与 Firebase 托管一起使用的 Firebase 网络应用程序?

来自分类Dev

是否可以将不带参数并返回void的函数指针类型与带参数并返回值的函数一起使用?

来自分类Dev

将Cooked函数与cout一起使用时,应用程序崩溃

来自分类Dev

将函数(不使用 lambda)与应用方法一起用于 Pandas DataFrame

来自分类Dev

我可以将COUNTIF函数与GETPIVOTDATA一起使用吗?

来自分类Dev

可以将Azure函数与URI路径ID一起使用吗?

Related 相关文章

  1. 1

    cublas中是否有可以将S型函数应用于矢量的函数?

  2. 2

    是否可以将预测函数与 r 中的随机森林模型一起使用?

  3. 3

    是否可以将std :: sort与需要额外参数的sort函数一起使用?

  4. 4

    是否可以将typeof与泛型函数一起使用?

  5. 5

    是否可以将Oracle的用户定义的聚合函数定义为与两列一起使用?

  6. 6

    Kotlin将函数与数据类一起应用

  7. 7

    将函数与group-by一起应用于data.table的所有列

  8. 8

    将函数与group-by一起应用于data.table的所有列

  9. 9

    我可以将DT软件包与RShiny中的tabsetpanel函数一起使用吗?

  10. 10

    将callCC与R中的高阶函数一起使用

  11. 11

    将malloc与函数中的结构一起使用

  12. 12

    可以与具有不同类型签名的函数一起使用的函数

  13. 13

    将嵌套函数与事件监听器一起使用是否有任何问题?

  14. 14

    Openlayers 3中可以与feature.getStyle()函数一起使用的函数是什么?

  15. 15

    将 Like 函数与 CDate 函数一起使用

  16. 16

    是否可以将用户定义的聚合(clr)与窗口函数一起使用?

  17. 17

    是否可以将NewRelic与混合移动应用程序一起使用?

  18. 18

    是否可以部署将Python 3.4与Fabric一起使用的应用程序?

  19. 19

    是否可以将Java WebSocket与桌面应用程序一起使用?

  20. 20

    是否可以将NAudio.Lame与Xamarin(Android / iOS)应用程序一起使用?

  21. 21

    是否可以部署将Python 3.4与Fabric一起使用的应用程序?

  22. 22

    是否可以将Java WebSocket与桌面应用程序一起使用?

  23. 23

    是否可以将AWS SES与HEROKU上的应用程序一起使用?

  24. 24

    是否可以托管将 Firestore 与 Firebase 托管一起使用的 Firebase 网络应用程序?

  25. 25

    是否可以将不带参数并返回void的函数指针类型与带参数并返回值的函数一起使用?

  26. 26

    将Cooked函数与cout一起使用时,应用程序崩溃

  27. 27

    将函数(不使用 lambda)与应用方法一起用于 Pandas DataFrame

  28. 28

    我可以将COUNTIF函数与GETPIVOTDATA一起使用吗?

  29. 29

    可以将Azure函数与URI路径ID一起使用吗?

热门标签

归档