CUDA实践指南(三十二)

简介:

CUDA工具包库再分发:
CUDA工具包的最终用户许可协议(EULA)允许在特定条款和条件下重新分配许多CUDA库。 这允许依赖于这些库的应用程序重新分配构建和测试的库的确切版本,从而避免为可能安装了不同版本的CUDA Toolkit(或者根本不可能)的最终用户带来麻烦 他们的机器。 详情请参阅EULA。
这不适用于NVIDIA驱动程序; 最终用户仍然必须下载并安装适合其GPU和操作系统的NVIDIA驱动程序。
要重新分配哪些文件:
重新分配一个或多个CUDA库的动态链接版本时,识别需要重新分配的确切文件非常重要。 以下示例使用CUDA Toolkit 5.5中的cuBLAS库作为示例:
Linux:
在Linux上的共享库中,有一个名为SONAME的字符串字段,它指示库的二进制兼容级别。 构建应用程序的库的SONAME必须与应用程序重新分发的库的文件名匹配。
例如,在标准的CUDA工具包安装中,文件libcublas.so和libcublas.so.5.5都是指向特定版本的cuBLAS的符号链接,其名称类似于libcublas.so.5.5.x,其中x是内部版本号 (例如,libcublas.so.5.5.17)。 但是,该库的SONAME以“libcublas.so.5.5”的形式给出:

$ objdump -p /usr/local/cuda/lib64/libcublas.so | grep SONAME
SONAME libcublas.so.5.5

因此,即使在链接应用程序时使用-lcublas(没有指定版本号),链接时发现的SONAME意味着“libcublas.so.5.5”是动态加载程序将查找的文件的名称 当加载应用程序时,因此必须是与应用程序重新分发的文件名(或符号链接)。
ldd工具对于识别应用程序期望在运行时期望找到的库的确切文件名以及动态加载器在加载给定当前库的应用程序时将选择的该库副本的路径(如果有的话)很有用 搜索路径:

$ ldd a.out | grep libcublas
libcublas.so.5.5 => /usr/local/cuda/lib64/libcublas.so.5.5
M

Mac:
在Mac OS X上的共享库中,有一个名为“安装名称”的字段,用于指示库的预期安装路径和文件名; CUDA库也使用这个文件名来表示二进制兼容性。 该字段的值将传播到针对库构建的应用程序中,并用于在运行时查找正确版本的库。
要查看库的安装名称,请使用otool -L命令:

$ otool - L a.out
a.out:
    @rpath/libcublas.5.5.dylib(...)

Windows:
Windows上的CUDA库的二进制兼容版本被指定为文件名的一部分。
例如,链接到cuBLAS 5.5的64位应用程序将在运行时查找cublas64_55.dll,因此即使cublas.lib是该应用程序链接的文件,该文件也应该与该应用程序重新分发。 对于32位应用程序,该文件将是cublas32_55.dll。
要验证应用程序在运行时期望找到的确切DLL文件名,请使用Visual Studio命令提示符下的dumpbin工具:

$ dumpbin / IMPORTS a.exe
Microsoft(R) COFF / PE Dumper Version 10.00.40219.01
Copyright(C) Microsoft Corporation.All rights reserved.
Dump of file a.exe
File Type : EXECUTABLE IMAGE
Section contains the following imports :
...
cublas64_55.dll
目录
相关文章
|
测试技术 网络架构
SFP与GBIC详解:探索两者的细微差别
【4月更文挑战第21天】
348 0
|
PHP 数据安全/隐私保护
[SUCTF 2019]EasyWeb
[SUCTF 2019]EasyWeb
285 0
|
人工智能 编解码
国内原汁原味的免费sd训练工具--哩布哩布AI
国内原汁原味的免费sd训练工具--哩布哩布AI
1970 0
|
9月前
|
存储 Kubernetes API
什么是 HashiCorp Vault?如何将其与微服务一起使用?
什么是 HashiCorp Vault?如何将其与微服务一起使用?
561 1
|
12月前
|
存储 安全 Java
javax.security.auth.login.LoginException: Receive timed out
`亲测可用,之前搜索了很多博客,啥样的都有,就是不介绍报错以及配置用处,根本不懂照抄那些配置是干啥的,稀里糊涂的按照博客搭完也跑不起来,因此记录这个。` `项目背景`:公司项目当前采用http协议+shiro+mysql的登录认证方式,而现在想支持ldap协议认证登录然后能够访问自己公司的项目网站。 `举例说明`:假设我们公司有自己的门户网站,现在我们收购了一家公司,他们数据库采用ldap存储用户数据,那么为了他们账户能登陆我们公司项目所以需要集成,而不是再把他们的账户重新在mysql再创建一遍,万一人家有1W个账户呢,不累死了且也不现实啊。
187 10
|
测试技术 计算机视觉
【YOLOv8性能对比试验】YOLOv8n/s/m/l/x不同模型尺寸大小的实验结果对比及结论参考
【YOLOv8性能对比试验】YOLOv8n/s/m/l/x不同模型尺寸大小的实验结果对比及结论参考
|
Ubuntu Linux 网络安全
SSH 远程登录报错:Permission denied, please try again. 解决办法
SSH 远程登录报错:Permission denied, please try again. 解决办法
4720 0
|
关系型数据库 Apache DataX
BDCC - 数据集成领域的主流中间件_ Apache SeaTunnel vs Flink CDC vs DataX vs Apache Sqoop vs Apache Flume
BDCC - 数据集成领域的主流中间件_ Apache SeaTunnel vs Flink CDC vs DataX vs Apache Sqoop vs Apache Flume
1319 0
|
缓存 算法 安全
这才叫 API 接口设计!
一家公司的每个系统都会有各种各样的接口,但是大部分公司,特别是传统行业的公司的所谓接口文档更多是当每个系传统的 word 文本格式,这种传统的格式有着人尽皆知的痛点: 1. 维护不及时; 2. 与代码不同步; 3. 归档后“便束之高阁”; 4. 接口文档跟代码没有互动; 5. 文本检索无法建立全局搜索,需要额外借助工具。 为了解决上述的问题,需要建立一套行之有效的接口管理体系,该体系的目标是: 1. 能够进行接口文档管理,作为后续的接口治理的其中一部分; 2. 能作为接口测试的平台,这样能保证接口跟代码是同步的; 3. 支持文本检索。