在内核函数中,我想要两个共享内存向量,两者都有size长度(实际上sizeof(float)*size).
因为如果需要变量就无法直接在内核函数中分配内存,我必须动态分配它,如:
myKernel<<<numBlocks, numThreads, 2*sizeof(float)*size>>> (...);
Run Code Online (Sandbox Code Playgroud)
并且,在内核中:
extern __shared__ float row[];
extern __shared__ float results[];
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用.
取而代之的是,我只extern __shared__ float rowresults[]使用2*size分配的内存制作了一个包含所有数据的向量.所以row通话仍然是一样的,results通话也是如此rowresults[size+previousIndex].这确实有效.
这不是一个大问题,因为无论如何我得到了我期望的结果,但有没有办法将我动态分配的共享内存分成两个(或更多)不同的变量?只是为了美丽.
我想从CUDA代码(kernel.cu)创建一个.dll ,以便从外部C程序使用此库。经过一些尝试,我只是在.cu文件中保留了一个简单的C函数。代码如下:
内核
#include <stdio.h>
#include "kernel.h"
void hello(const char *s) {
printf("Hello %s\n", s);
}/*
Run Code Online (Sandbox Code Playgroud)
内核
#ifndef KERNEL_H
#define KERNEL_H
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#ifdef __cplusplus
extern "C" {
#endif
void __declspec(dllexport) hello(const char *s);
#ifdef __cplusplus
}
#endif
#endif // KERNEL_H
Run Code Online (Sandbox Code Playgroud)
我尝试使用以下方法创建DLL 之后先生成一个kernel.o对象,如下所示:nvccg++
nvcc -c kernel.cu -o kernel.o
g++ -shared -o kernel.dll kernel.o -L"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\lib\x64" -lcudart
Run Code Online (Sandbox Code Playgroud)
它工作正常并生成kernel.dll。为了测试DLL文件,我编写了以下简单程序main.c:
#include <stdio.h>
#ifdef __cplusplus
extern "C" {
#endif …Run Code Online (Sandbox Code Playgroud)