我有一个奇怪的时间从我在Linux上的应用程序的分析代码中读取,所以我决定通过NVidia Visual Profiler运行它.然而,在工具包4.1上,他们决定删除Compute Visual Profiler以引入nvvp.我需要处理程序之外的数据,nvvp不能做的是平均值,偏差,置信度和大量统计数据.问题是nvvp中没有导出功能,Compute Visual Profiler至少可以让你导出到CSV.是否有解决方案而不是安装4.0工具包?
谢谢
系统:Ubuntu 11.10 x86_64 CUDA:v 2.1
当尝试制作像matrixMul这样的示例程序时,我会收到大量错误,其中大部分是"未知类型名称'size_t'." 我已经确保将/ usr/local/cuda/bin放在我的PATH中,将/ usr/local/cuda/lib放在/etc/ld.so.conf.d中的.conf中.
有什么想法我为什么会收到这些错误?
matrixMul$ make emu=1
In file included from /tmp/tmpxft_00004089_00000000-1_matrixMul.cudafe1.stub.c:5:0,
from matrixMul.cu:196:
/usr/local/cuda//bin/../include/crt/host_runtime.h:192:0: warning: "__device_fun" redefined [enabled by default]
/usr/local/cuda//bin/../include/crt/host_runtime.h:215:0: note: this is the location of the previous definition
/usr/local/cuda//bin/../include/crt/host_runtime.h:194:0: warning: "__device_var" redefined [enabled by default]
/usr/local/cuda//bin/../include/crt/host_runtime.h:217:0: note: this is the location of the previous definition
/usr/local/cuda//bin/../include/crt/host_runtime.h:196:0: warning: "__tex_var" redefined [enabled by default]
/usr/local/cuda//bin/../include/crt/host_runtime.h:219:0: note: this is the location of the previous definition
/usr/local/cuda//bin/../include/crt/host_runtime.h:198:0: warning: "__cudaFatCubin" redefined [enabled by default]
/usr/local/cuda//bin/../include/crt/host_runtime.h:221:0: note: …Run Code Online (Sandbox Code Playgroud) 我已声明以下模板以缩短代码:
template <typename T>
void allocateGPUSpace(T* ptr, int size){
cudaMalloc((void**)&ptr,size * sizeof(T));
}
Run Code Online (Sandbox Code Playgroud)
而且,我使用模板如下:
float* alphaWiMinusOne;
allocateGPUSpace<float>( alphaWiMinusOne,numUnigrams);
但是,当我编译代码时,VS 2008会发出警告
warning: variable "alphaWiMinusOne" is used before its value is set
Run Code Online (Sandbox Code Playgroud)
和
uninitialized local variable 'alphaWiMinusOne' used
Run Code Online (Sandbox Code Playgroud)
cuda不理解C++中的模板吗?天哪,这对于nvidia来说是必须的
在具有 4 个 NVIDIA GPU 的节点上,我在设备 0 上启用了 ECC 内存保护(所有其他都禁用了 ECC)。由于我在设备 0 上启用了 ECC,我的应用程序(CUDA,仅使用一个设备)在尝试在此设备 0(驱动程序 API)上创建上下文时挂起。我不知道为什么它在那一刻挂起。如果我根据另一台设备使用不同的设备设置 CUDA_VISIBLE_DEVICE 它工作正常。它必须与启用 ECC 有关。有什么想法吗?这里的输出nvidia-smi:(为什么它报告 99% 不稳定的 GPU 利用率,那里什么都没有运行?)
+------------------------------------------------------+
| NVIDIA-SMI 4.304.54 Driver Version: 304.54 |
|-------------------------------+----------------------+----------------------+
| GPU Name | Bus-Id Disp. | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla K20m | 0000:02:00.0 Off | 1 |
| N/A 29C P0 49W / 225W | 0% 12MB / 4799MB …Run Code Online (Sandbox Code Playgroud) 我需要找到浮点数组中最大元素的索引.我正在使用函数"cublasIsamax",但这会将索引返回给CPU,这会减慢应用程序的运行时间.
有没有办法有效地计算这个索引并将其存储在GPU中?
谢谢!
通过以下链接编写:https://docs.nvidia.com/deploy/pdf/CUDA_Multi_Process_Service_Overview.pdf
1.1.乍看上去
1.1.1.MPS
多进程服务(MPS)是CUDA应用程序编程接口(API)的替代二进制兼容实现.MPS运行时架构旨在透明地启用协作式多进程CUDA应用程序(通常为MPI作业),以在最新的NVIDIA(基于Kepler的)Tesla和Quadro GPU上使用Hyper-Q功能.Hyper-Q允许在同一GPU上同时处理CUDA内核; 当GPU计算容量未被单个应用程序进程利用时,这可以提高性能.
使用CUDA6.5 + MPI(OpenMPI/IntelMPI)时是否必须使用MPS(多进程服务),或者我可以不使用MPS而丢失一些性能但没有任何错误?
如果我不使用MPS,是否意味着单个服务器上的所有MPI进程将在单个GPU卡上顺序执行(而非并发)GPU内核函数,但所有其他行为将保持不变?
早上好。
我开始学习 cuda 编程,我正在学习性能。我在 CUDA 网站上读到,要获得良好的性能,我们应该考虑四件事:
-每个 SM 的扭曲(系统多处理器) -每个 SM 的块数 -每个 SM 的注册 -每个 SM 的共享内存
所以我要重温第一件事,并且根据 GPU,我根据每个 SM 的最大扭曲和每个 SM 的块定义了内核的尺寸。我的任务是执行一亿次求和来衡量哪种方法更好。
我所做的是一个 for 循环,在该循环中,我在每次迭代时启动一个内核,以最大化占用率。例如,对于 NVidia 1080 GPU,我读到:
int max_blocks = 32; //maximum number of active blocks per SM
int max_threads_per_Block = 64; //maximum number of active threads per SM
int max_threads = 2048;
这为每个 SM 提供总共 2048 个线程并保证最大占用率。这个 GPU 可以有 64 个活动扭曲,每个扭曲有 32 个线程。在这个 GPU 中,一个活动块有 2 个扭曲,这意味着每个块一次可以有 64 个活动线程。有了这个,我按如下方式启动内核:
dim3 threadsPerBlock(max_threads_per_Block);
dim3 numBlocks(max_blocks);
VecAdd<<<numBlocks, threadsPerBlock>>>(d_A, …
我正在尝试在Nvidia卡上找到本机算术运算的吞吐量。在此页面上,Nvidia已记录了各种算术运算的吞吐量值。问题是如何确定我的卡是否进行16位或32位或64位操作,因为每个值都不相同?此外,我还想为我的卡计算这些指令的延迟值。有什么办法吗?就我的研究而言,它们没有像吞吐量那样得到记录。为此有一些基准套件吗?
谢谢!
我编写了以下代码来测试最大逻辑器件编号.
#include "vulkan/vulkan.hpp"
#include <cassert>
#include <vector>
#include <iostream>
int main() {
std::vector<vk::Instance> instances;
std::vector<vk::Device> devices;
try {
for( ; true; ) {
vk::InstanceCreateInfo instanceInfo {};
instances.push_back( vk::createInstance( instanceInfo ) );
auto physicalDevices = instances.back().enumeratePhysicalDevices();
if( 0 == physicalDevices.size() )
return 0;
vk::DeviceQueueCreateInfo deviceQueueCreateInfo {};
deviceQueueCreateInfo.queueFamilyIndex = 0;
deviceQueueCreateInfo.queueCount = 1;
vk::DeviceCreateInfo deviceCreateInfo {};
deviceCreateInfo.queueCreateInfoCount = 1;
deviceCreateInfo.pQueueCreateInfos = &deviceQueueCreateInfo;
auto device = physicalDevices.front().createDevice( deviceCreateInfo );
if( !device ) {
throw 0;
}
devices.push_back( device );
}
}
catch( std::system_error …Run Code Online (Sandbox Code Playgroud) I always thought that Hyper-Q technology is nothing but the streams in GPU. Later I found I was wrong(Am I?). So I was doing some reading about Hyper-Q and got confused more. I was going through one article and it had these two statements:
A. Hyper-Q is a flexible solution that allows separate connections from multiple CUDA streams, from multiple Message Passing Interface (MPI) processes, or even from multiple threads within a process
B. Hyper-Q通过允许32个同时进行的硬件管理的连接(与Fermi可用的单个连接相比),增加了主机与GK110 GPU之间的连接(工作队列)总数。
在前面提到的观点中,观点B指出主机可以创建多个连接到单个GPU。这是否意味着我可以通过不同的应用程序在一个简单的GPU上创建多个上下文?这是否意味着我必须在不同的流上执行所有应用程序?如果我的所有连接都占用内存并且计算资源消耗,谁来管理资源(内存/核心)调度,该怎么办?