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天】
483 0
|
人工智能 编解码
国内原汁原味的免费sd训练工具--哩布哩布AI
国内原汁原味的免费sd训练工具--哩布哩布AI
2264 0
|
PHP 数据安全/隐私保护
[SUCTF 2019]EasyWeb
[SUCTF 2019]EasyWeb
365 0
|
开发工具 计算机视觉 C++
OpenCv、Vis Studio安装与配置
OpenCv、Vis Studio安装与配置
175 2
OpenCv、Vis Studio安装与配置
|
存储 安全 Java
javax.security.auth.login.LoginException: Receive timed out
`亲测可用,之前搜索了很多博客,啥样的都有,就是不介绍报错以及配置用处,根本不懂照抄那些配置是干啥的,稀里糊涂的按照博客搭完也跑不起来,因此记录这个。` `项目背景`:公司项目当前采用http协议+shiro+mysql的登录认证方式,而现在想支持ldap协议认证登录然后能够访问自己公司的项目网站。 `举例说明`:假设我们公司有自己的门户网站,现在我们收购了一家公司,他们数据库采用ldap存储用户数据,那么为了他们账户能登陆我们公司项目所以需要集成,而不是再把他们的账户重新在mysql再创建一遍,万一人家有1W个账户呢,不累死了且也不现实啊。
209 10
|
开发工具 git 开发者
如何让现有的 Git 分支跟踪远程分支?
【8月更文挑战第15天】
1468 1
如何让现有的 Git 分支跟踪远程分支?
|
XML 安全 网络协议
Xxe外部实体注入(XML External Entity Injection)
Xxe外部实体注入(XML External Entity Injection)
|
SQL 安全 前端开发
毕设答辩问题讲解说明:基于SpringBoot+Vue的汉服文化交流社区平台设计与开发
这篇文章是关于一个基于SpringBoot+Vue的汉服文化交流社区平台的毕业设计答辩问题讲解,涵盖了系统功能、亮点创新、数据库设计、积分领取机制、数据库安全和个人密码修改功能等方面的答辩问题和回答要点。
|
机器学习/深度学习 运维 监控
高效运维:从自动化到智能化的演进之路
在当今信息技术飞速发展的时代,运维作为保障信息系统稳定、高效运行的重要环节,正经历着从传统手工操作向自动化、智能化转变的历史进程。本文将探讨自动化运维的实践价值与实施策略,阐述智能化运维的理念框架及其关键技术,并通过案例分析揭示这一演进路径如何助力企业提升运维效率、降低运营成本,并增强对复杂系统的掌控能力。通过深入剖析,本文旨在为读者呈现一幅从自动化迈向智能化的运维全景图,为寻求运维转型的企业提供参考与启示。