在linux系统中,kernel函数可以编译成类似链接库的形式吗

在linux系统中,可不可以把一个kernel函数编译成类似动态链接库的东西,在需要计算的时候链接它?如果可以的话,应该怎么做呢?

楼主您好,这样做是可以的。实际上很多第三方库通过这种形式发布。

我将在下文为您说明如何实现。
(1)正常用CUDA 5.0 runtime模板建立一个项目。
(2)建立完毕后,在project上点击右键,选择属性,在配置属性里,改成“Dynamic Link Library"。点击确定。
(3)将kernel.cu的内容替换为以下范例:
#include “cuda_runtime.h”

global void dummy_kernel()
{

}

extern “C” __declspec(dllexport) void dummy()
{
dummy_kernel<<<1,1>>>();
cudaDeviceSynchronize();
}
(4)按F6进行build。
(5)打开项目的debu或者release目录,你会看到 项目名.dll, 项目名.lib 这2个文件(例如wkf.dll和wkf.lib),以及其他文件。
(6)将 wkf.dll,和,wkf.lib复制到一个新的空白文件夹,准备交付给最终用户。
(7)在包含有wkf.dll,和,wkf.lib的文件夹中,新建一wkf.h文件,输入范例:
extern “C” extern void dummy();
(8)将此文件夹打包为wkf.zip

-----------------------wangkefeng的分割线--------------------------------------
下面转为最终用户角色。
(1)从厂商wangkefeng处购买第三方库wagnkefeng.zip。
(2)将此zip解压,提取wkf.dll, wkf.lib, wkf.h, 并分别放置到喜爱的目录下。
(3)新建一普通win32或mfc或atl或c++ cli项目。
(4)在该项目中需要使用第三方库wkf的源文件中,头部输入#include <wkf.h>,并在使用处输入dummy()来调用dll中的函数。
(5)配置该项目属性的addition include directory,包含wkf.h的所在目录。
(6)配置该项目属性的addition library directory,包含wkf.lib的所在目录。
(7)配置该项目属性的linker input, 添加wkf.lib, 确定。
(8)F6执行build
(9)将wkf.dll放入和您的exe的同一路径下。
(10)执行您的exe, 则wfk.dll中的dummy()被调用,则该kernel被调用。

以上是一个简单范例,请您参考。

感谢您莅临CUDAZone China,
祝您晚安。

非常感谢您的帮助。

版主您好,我刚才用CUDA5.0 runtime末班建立了一个项目,生成了一个bitreverse的示例,然后在项目上右键属性后,主要有:Resource,Build,Builders,General,Run/Debug settings。不知道您说的配置属性是在哪里?没有找见“Dynamic Link Library”。本人作为一个菜鸟,还望版主不要介意。

如图(附件)
[attach]3042[/attach]

以及,这是VS2010, 如果你用的是VS2008, 有请ICE发2008的图(应该不难找,你也可以自己找找)。

哦,我刚是在linux下面的Nsight中试的,没有找见这个选项。

在linux系统下面,怎么把kernel弄成类似于dll的东西,在linux下面调用这个东西?

VS 2008d 在这里

[attach]3043[/attach]

抱歉,不懂Linux(R) OS。无法为您回复。如果您用windows,上述信息足够。用Linux欢迎其他会员/版主/NVIDIA技术支持/总版主为您指出其过程。

依旧非常感谢您的指导

能够服务您是我和ICE千古不变的荣幸。

需要说明的是,本主题贴被楼主再次编辑过,我和ICE上述楼层的回答不再适用于现在的1#。