- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个包含许多源文件的项目(示例:main.cu、a.cu、b.cu、c.cu、d.cu)。每个都有函数和内核调用(全局 和设备)。
在头文件 (cpu.h) 中,主机端使用的所有结构和定义。另一个头文件(gpu.h)在设备端使用的所有结构和定义。
如果我从 main.cu 调用内核函数,在 a.cu 中声明。我如何#include那些在 a.cu 中声明的内核函数以在 main.cu 中使用,而不执行 not 推荐 #include "a.cu"?
我是否在 a.cu 中创建带有内核函数前向声明的 header a.h?例子:extern void functionA(type);
CUDA 内核函数怎么样?我应该为从另一个源文件使用的每个源文件创建一个头文件吗?
我提到 Nsight Eclipse 是因为我在使用它和多个来源时遇到了很多麻烦。我在 Ubuntu Linux 和 Mac OS 环境中使用 CUDA 5.5 工具包。我的主要开发环境是在 Ubuntu Linux 机器上有 4 个 Tesla C1060 卡。
最佳答案
分离内核。在一个工程中,创建两个文件(我重构了默认的Runtime Project模板,创建了device.cu和host.cu)
设备.cu:
__device__ unsigned int bitreverse(unsigned int number) {
number = ((0xf0f0f0f0 & number) >> 4) | ((0x0f0f0f0f & number) << 4);
number = ((0xcccccccc & number) >> 2) | ((0x33333333 & number) << 2);
number = ((0xaaaaaaaa & number) >> 1) | ((0x55555555 & number) << 1);
return number;
}
__global__ void bitreverse(void *data) {
unsigned int *idata = (unsigned int*) data;
idata[threadIdx.x] = bitreverse(idata[threadIdx.x]);
}
主机.cu:
extern __global__ void bitreverse(void *data);
...
bitreverse<<<1, WORK_SIZE, WORK_SIZE * sizeof(int)>>>(d);
单独编译
设备.cu:
__device__ unsigned int bitreverse(unsigned int number) {
number = ((0xf0f0f0f0 & number) >> 4) | ((0x0f0f0f0f & number) << 4);
number = ((0xcccccccc & number) >> 2) | ((0x33333333 & number) << 2);
number = ((0xaaaaaaaa & number) >> 1) | ((0x55555555 & number) << 1);
return number;
}
主机.cu:
extern __device__ unsigned int bitreverse(unsigned int number);
__global__ void bitreverse(void *data) {
unsigned int *idata = (unsigned int*) data;
idata[threadIdx.x] = bitreverse(idata[threadIdx.x]);
}
...
bitreverse<<<1, WORK_SIZE, WORK_SIZE * sizeof(int)>>>(d);
隔离 CUDA 代码 一种常见的模式是将 CUDA 代码隔离在 .cu 文件中,这些文件具有包装内核调用的主机函数。通过这种方式,您可以将此类 .cu 文件生成的目标文件链接到以 .cpp 或 .c 文件编写的主机代码。请记住,导出的主机代码函数应使用 extern "C"
进行限定才能从 .c 文件中使用。
extern
声明可以放在 .h 文件中。请注意,具有 CUDA C 语法的 .h 文件(__global__
是 CUDA C 特定的)不能包含在 .cpp 或 .c 中。
将文件添加到项目
通常我只是将文件复制到项目文件夹,右键单击项目并执行“刷新”。 Nsight 会将它们编入索引并包含在构建中。
从构建中排除文件
如果绝对需要,您可以将设备代码复制到 header 并包含 header (约定是此类 header 文件的扩展名为 .cuh,尽管 .h 的工作原理相同)。您可以包含 .cu - 问题是 Nsight 将此类文件视为源文件并尝试编译它们。您可以通过选中构建属性中构建子树中任何属性页顶部的“从构建中排除资源”复选框来从构建中排除 .cu 文件。
CUDA 多文件示例
几乎所有重要样本都被分解成多个文件。只需从“粒子”示例等创建一个 Nsight 项目。
关于linux - 如何在 Nsight Eclipse 中包含多个源文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19101763/
我正在使用 nsight 2.2、Toolkit 4.2、最新的 nvidia 驱动程序,我在我的计算机中使用了几个 GPU。构建自定义 4.2。我在 CUDA 的项目属性上设置了“生成 GPU 输出
我一直在尝试让一个 Nsight 项目(项目 1)使用另一个 Nsight 项目(2)中的一些文件,但我终究无法构建项目 1! 我已经尝试引用/设置包括路径/将项目 2 构建为 lib 等,但没有任何
我正在尝试使用 NSight Visual Studio 分析器分析以下内核: __global__ void cuMultiplyMatricesStandard(float* A, float*
我已经成功安装了 Cuda SDK 并使用 HelloWorld 测试了编译器 然后我打开了 Nsight 并尝试使用相同的代码。 我得到了这个答案“启动失败。找不到二进制文件。”这是Nsight中涉
我有一个奇怪的问题,当尝试使用 NSight 附加应用程序时,列表中没有显示可用的进程。 我正在尝试调试 CUDA 代码。所以我将我的 VS2012 项目附加到一个应用程序(MATLAB)。它曾经工作
我的内核在 CC 3.0 (Kepler) 上的性能比在 CC 2.0 (Fermi) 上的性能差。在 Nsight 分析器中,Warp Issue Efficiency 图表显示 60% 的时间没有
我正在使用 NSight Eclipse 创建一个类库,其中包含 CUDA 加速类,旨在由第三方应用程序扩展和使用。让我们称我的项目为“foo”。我想通过在一个单独的项目中编写一个第三方应用程序来测试
我正在尝试将“localhost”设置为 Nsight 的连接名称(我在 VS2010 上使用 CUDA 4.2 和 Nsight 2.2)但是有类似“localhost overridden to
我如何使用并行 nsight 知道非合并读/写和存储区冲突的数量? 此外,当我使用 nsight 是一个分析器时我应该看什么?哪些重要字段可能会导致我的程序变慢? 最佳答案 我不使用 NSight,但
我正在尝试使用 NSight 中的内置分析器分析我的程序,但分析 session 在启动后立即终止,并且我收到反馈“警告:应用程序收到信号 139”。这是什么意思? 我还收到以下错误消息: Unabl
最初 Java 虚拟机甚至无法启动,但我通过编辑 nsight.ini 文件并删除来修复 -XX:MaxPermSize=256m 和更新 -Dosgi.requiredJavaVersion 所以我
我的电脑上没有支持 CUDA 的显卡。我可以使用 ssh(或其他任何方式)将 NVIDIA Nsight 连接到远程计算机吗? 最佳答案 是的,您可以使用 Nsight Visual Studio E
计算工作负载分析显示不同计算管道的利用率。我知道在现代 GPU 中,整数和浮点管道是不同的硬件单元,可以并行执行。但是,对于其他管道,哪个管道代表哪个硬件单元并不是很清楚。我也找不到任何关于管道缩写和
我一直在为一个我似乎无法找到解决方案的问题而苦苦挣扎。 问题是,当我尝试在 Visual Studio 2008 下使用 Nvidia Nsight 调试我的 CUDA 代码时,我在使用共享内存时得到
我正在学习 __shared__ CUDA 中的内存,我对 Nsight Compute 如何显示共享内存统计信息感到困惑。 我正在经历this article (代码在 Nvidia 的 githu
我正在使用 nsight eclipse 版本,我现在无法弄清楚如何在 Debug模式下查看变量值(意思是主机内存中的普通变量,到目前为止调试普通的 c++ 代码)。“变量”选项卡不包含任何对我有用的
我正在尝试将顶点位置作为简单的 out vec3 pos 从顶点着色器传递到片段着色器,以便根据顶点的位置对顶点进行着色。这是我的顶点着色器代码: #version 330 core in vec3
我用cuda5.5安装了nsight。一切正常,但我正在尝试在主机上运行 opencv 函数来生成图像。我包括 opencv header 路径以及我需要的库路径。当我尝试编译时出现此错误 /Appl
我有一个包含许多源文件的项目(示例:main.cu、a.cu、b.cu、c.cu、d.cu)。每个都有函数和内核调用(全局 和设备)。 在头文件 (cpu.h) 中,主机端使用的所有结构和定义。另一个
安装cuda后找不到Nsight Eclipse Edition 我在Ubuntu18.04上安装了cuda11.1(之前安装了Nvidia驱动),没有报错。但是当我在终端上输入“nvcc -V”和“
我是一名优秀的程序员,十分优秀!