当前位置: 首页 > 知识库问答 >
问题:

同一库中的动态并行性和CC 2.0代码

解晟睿
2023-03-14

在我的库中,我需要支持计算能力2.0及更高的设备。对于CC 3.5设备,我已经实现了利用动态并行的优化内核。当指定小于“compute_35,sm_35”时,nvcc编译器似乎不支持DP(我收到编译器/链接器错误)。我的问题是在这种情况下支持多个内核版本的最佳方法是什么?拥有多个DLL并在运行时在它们之间进行选择将起作用,但我想知道是否有更好的方法

更新:我已成功使用#if __CUDA_ARCH__

1.


共有1个答案

荆城
2023-03-14

我相信CUDA 6已经解决了这个问题。

特别是,与指定 -lcudadevrt 库并为不需要动态并行的代码抛出链接错误相关的编译问题已被消除/删除。

这是我的简单测试:

$ cat t264.cu
#include <stdio.h>

__global__ void kernel1(){
  printf("Hello from DP Kernel\n");
}

__global__ void kernel2(){

#if __CUDA_ARCH__ >= 350
  kernel1<<<1,1>>>();
#else
  printf("Hello from non-DP Kernel\n");
#endif
}

int main(){

  kernel2<<<1,1>>>();
  cudaDeviceSynchronize();
  return 0;
}
$ nvcc -O3 -gencode arch=compute_20,code=sm_20 -gencode arch=compute_35,code=sm_35 -rdc=true -o t264 t264.cu -lcudadevrt
$ CUDA_VISIBLE_DEVICES="0" ./t264
Hello from non-DP Kernel
$ CUDA_VISIBLE_DEVICES="1" ./t264
Hello from DP Kernel
$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2013 NVIDIA Corporation
Built on Sat_Jan_25_17:33:19_PST_2014
Cuda compilation tools, release 6.0, V6.0.1
$

在我的例子中,设备0是Quadro5000,cc 2.0设备,设备1是GeForce GT 640,cc 3.5设备。

 类似资料:
  • CGO在使用C/C++资源的时候一般有三种形式:直接使用源码;链接静态库;链接动态库。直接使用源码就是在import "C"之前的注释部分包含C代码,或者在当前包中包含C/C++源文件。链接静态库和动态库的方式比较类似,都是通过在LDFLAGS选项指定要链接的库方式链接。本节我们主要关注在CGO中如何使用静态库和动态库相关的问题。 2.9.1 使用C静态库 如果CGO中引入的C/C++资源有代码而

  • (译注:这部分作者还没有完成,不过一旦英文版出来,中文版将进行同步更新,请读者多多关注!) 参考: [N2660 = 08-0170] Lawrence Crowl: Dynamic Initialization and Destruction with Concurrency (Final proposal). (翻译:lianggang jiang)

  • 本文向大家介绍详解Python中的动态属性和特性,包括了详解Python中的动态属性和特性的使用技巧和注意事项,需要的朋友参考一下 导语:本文章记录了本人在学习Python基础之元编程篇的重点知识及个人心得,打算入门Python的朋友们可以来一起学习并交流。 一、利用动态属性处理JSON数据源 属性:在Python中,数据的属性和处理数据的方法统称属性。 元编程:用元类进行编程,元类→类→对象,元

  • 我使用嵌套的Select语句从表1中获得单行结果,我需要在同一行的末尾追加表3中的另一列(COLX)。我试过联合,但结果是两行。有什么建议吗? table2.colz和table3.colx是用来匹配条目的ID。这两个最终结果都符合要求。 编辑(进一步解释我的表结构) COLX是表3的ID,以匹配表2中的COLZ 表2 ID中的COL1与表1中的COL1匹配 结果我需要的是表1.col1,表1.c

  • 静态库和动态库 静态库 共享库 动态库 接口的封装和设计 动态库的使用 动态库升级成框架案例