Difference between global and device functions

后端 未结 9 1608
渐次进展
渐次进展 2021-01-29 20:10

Can anyone describe the differences between __global__ and __device__ ?

When should I use __device__, and when to use __glob

相关标签:
9条回答
  • 2021-01-29 20:53

    Differences between __device__ and __global__ functions are:

    __device__ functions can be called only from the device, and it is executed only in the device.

    __global__ functions can be called from the host, and it is executed in the device.

    Therefore, you call __device__ functions from kernels functions, and you don't have to set the kernel settings. You can also "overload" a function, e.g : you can declare void foo(void) and __device__ foo (void), then one is executed on the host and can only be called from a host function. The other is executed on the device and can only be called from a device or kernel function.

    You can also visit the following link: http://code.google.com/p/stanford-cs193g-sp2010/wiki/TutorialDeviceFunctions, it was useful for me.

    0 讨论(0)
  • 2021-01-29 21:00

    I will explain it with an example:

    main()
    {
        // Your main function. Executed by CPU
    }
    
    __global__ void calledFromCpuForGPU(...)
    {
      //This function is called by CPU and suppose to be executed on GPU
    }
    
    __device__ void calledFromGPUforGPU(...)
    {
      // This function is called by GPU and suppose to be executed on GPU
    }
    

    i.e. when we want a host(CPU) function to call a device(GPU) function, then 'global' is used. Read this: "https://code.google.com/p/stanford-cs193g-sp2010/wiki/TutorialGlobalFunctions"

    And when we want a device(GPU) function (rather kernel) to call another kernel function we use 'device'. Read this "https://code.google.com/p/stanford-cs193g-sp2010/wiki/TutorialDeviceFunctions"

    This should be enough to understand the difference.

    0 讨论(0)
  • 2021-01-29 21:01

    Global Function can only be called from the host and they don't have a return type while Device Function can only be called from kernel function of other Device function hence dosen't require kernel setting

    0 讨论(0)
提交回复
热议问题