相关疑难解决方法(0)

我是否应该使用'if'语句统一两个类似的内核,从而有降低性能的风险?

我有2个非常相似的内核函数,在某种意义上代码几乎相同,但略有不同.目前我有2个选择:

  • 写出2种不同的方法(但非常相似)
  • 编写单个内核并在if/else语句中放置不同的代码块

if语句对我的算法性能有多大影响?
我知道没有分支,因为所有块中的所有线程都将输入if或else.
如果内核函数被多次调用,那么单个if语句会降低我的性能吗?

c c++ optimization cuda gpgpu

34
推荐指数
1
解决办法
9293
查看次数

如何像C++ const/constexpr一样定义CUDA设备常量?

在.cu文件中,我在全局范围内尝试了以下内容(即不在函数中):

__device__ static const double cdInf = HUGE_VAL / 4;
Run Code Online (Sandbox Code Playgroud)

并得到nvcc错误:

error : dynamic initialization is not supported for __device__, __constant__ and __shared__ variables.
Run Code Online (Sandbox Code Playgroud)

如果可能的话,如何在设备上定义C++ const/constexpr?

注1:#define不仅仅是出于美学原因,而且因为在实践中表达式更复杂并且涉及内部数据类型,而不仅仅是双重的,这是不可能的.因此,每次在每个CUDA线程中调用构造函数都会太昂贵.

注2:我怀疑__constant__它的性能,因为它不是一个编译时常量,而是一个用它写的变量cudaMemcpyToSymbol.

c++ cuda constants compile-time-constant

4
推荐指数
1
解决办法
2778
查看次数

标签 统计

c++ ×2

cuda ×2

c ×1

compile-time-constant ×1

constants ×1

gpgpu ×1

optimization ×1