现代 GPU 架构同时具有 L1 缓存和 L2 缓存。众所周知,L1 缓存比全局内存快得多。然而,L2 缓存的速度在 CUDA 文档中不太清楚。我查阅了CUDA文档,但只能发现全局内存操作的延迟约为300-500个周期,而L1缓存操作只需要约30个周期。谁能给出二级缓存的速度吗?这些信息可能非常有用,因为如果 L2 缓存与全局内存相比不是很快,那么编程就不会专注于优化 L2 缓存的使用。如果不同架构的速度不同,我只想关注最新的架构,例如 NVIDIA Titan RTX 3090(计算能力 8.6)或 NVIDIA Telsa V100(计算能力 7.0)。
谢谢你!
我最近按照本教程安装了 OpenVINO ,一开始它警告我它看不到显卡。我以为它谈论的是英特尔高清显卡(或类似的),因为我没有其中之一,但我有 Nvidia GTX 1080ti。
我没有看到有人谈论过这一点,安装指南中也没有提到,但它甚至可以与 Nvidia 显卡一起使用吗?如果没有,使用 OpenVINO 有何意义?
I have been reading about the various approaches to memory management offered by CUDA, and I'm struggling to understand the difference between mapped memory:
int *foo;
std::size_t size = 32;
cudaHostAlloc(&foo, size, cudaHostAllocMapped);
Run Code Online (Sandbox Code Playgroud)
...and managed memory:
int *foo;
std::size_t size = 32;
cudaMallocManaged(&foo, size);
Run Code Online (Sandbox Code Playgroud)
They both appear to implicitly transfer memory between the host and device. cudaMallocManaged seems to be the newer API, and it uses the so-called "Unified Memory" system. That said, cudaHostAlloc seems to share many of these …
自 Volta 以来,Nvidia 为其 GPGPU 引入了新的独立线程调度。如果 CUDA 线程出现分歧,替代代码路径不会按块执行,而是按指令执行。尽管如此,由于 GPU 也是 SIMT,因此不同的路径无法同时执行。这是这篇文章的原文:
https://developer.nvidia.com/blog/inside-volta/(向下滚动到“独立线程调度”)。
我明白这意味着什么。我不明白的是,这种新行为以何种方式加速代码。即使上面文章中的前后图也没有反映出整体加速。
我的问题:由于所描述的新调度,哪种不同的算法在 Volta(和更新的)上运行得更快?
我想在项目中使用 NVIDIA 的 CUDA 工具包,但我有 Intel(R) Iris Xe Graphics (Windows 11 Pro)。在安装 Nvidia Graphics GeForce Game Ready 时,我收到以下错误
此 Nvidia 显卡驱动程序与此版本的 Windows 不兼容。该图形驱动程序找不到兼容的图形硬件
下面是Triton 编译器生成的明显合法的 PTX 汇编代码。我对加载和存储指令感到困惑{ %r1 }和使用。{ %r2 }根据 PTX ISA 文档,它看起来像一个初始值设定项列表。但这没有意义。不仅因为初始化规范没有提到寄存器的使用。甚至不是因为加载/存储语义中的初始化器是无用的(没有什么可以初始化)。最重要的是,我对加载/存储中的使用将{}参数的含义从标量更改为指针立即数这一事实感到困惑。
也许,一个无聊的开发者只是想让每个人的组装体验更加混乱。有谁有更好的解释吗?
.version 7.5
.target sm_35
.address_size 64
// .globl E__01
.visible .entry E__01(
.param .u64 E__01_param_0,
.param .u64 E__01_param_1
)
.maxntid 128, 1, 1
{
.reg .pred %p<3>;
.reg .b32 %r<4>;
.reg .b64 %rd<3>;
.loc 1 6 0
$L__func_begin0:
.loc 1 6 0
ld.param.u64 %rd2, [E__01_param_0];
ld.param.u64 %rd1, [E__01_param_1];
mov.pred %p1, -1;
$L__tmp0:
.loc 1 7 19
mov.u32 %r1, 0x0; …Run Code Online (Sandbox Code Playgroud) 任何人都可以告诉我如何通过程序找到GPU类型(费米,特斯拉或开普勒),以便根据GPU类型调用正确的函数.
通过cudaDeviceProp.major,我能够通过他们的计算能力区分Fermi和Tesla.但我无法区分费米和开普勒.
有谁知道如何找到它.
当我使用"glGetString(GL_VERSION)"和"glGetString(GL_SHADING_LANGUAGE_VERSION)"来检查我的计算机上的OpenGL版本时,我得到了以下信息:
3.1.0 - 为GL_VERSION构建8.15.10.2538
1.40 - 针对GL_SHADING_LANGUAGE_VERSION的英特尔Build 8.15.10.2538
当我运行"Geeks3D GPU Caps Viewer"时,它显示我的显卡的OpenGL版本(NVS 4200M)是
GL_VERSION:4.3.0
GLSL版本:4.30 NVIDIA通过Cg编译器
这是否意味着我的显卡只支持一些OpenGL 4.3.0功能,而我无法创建4.3上下文?
我有以下CUDA内核,它似乎非常"难以"优化:
__global__ void DataLayoutTransformKernel(cuDoubleComplex* d_origx, cuDoubleComplex* d_origx_remap, int n, int filter_size, int ai )
{
for(int idx = blockIdx.x * blockDim.x + threadIdx.x; idx < filter_size; idx+=blockDim.x * gridDim.x)
{
int index = (idx * ai) & (n-1);
d_origx_remap[idx] = d_origx[index];
}
}
//Parameters were defined before
int permute[loops] = {29165143,3831769,17603771,9301169,32350975, ...}
int n = 33554432;
int filter_size = 1783157;
for(int i=0; i<loops; i++)
{
DataLayoutTransformKernel<<<dimGrid, dimBlock, 0, stream[i]>>>((cuDoubleComplex*) d_origx,(cuDoubleComplex*)d_origx_remap+i*filter_size, n, filter_size, permute[i]);
}
Run Code Online (Sandbox Code Playgroud)
内核的目的是重新排序d_origx[]从不规则到常规(d_origx_remap)的数据布局.内核使用不同的访问步幅(ai …
当我使用nvidia-smi -l 60时,我问自己是否:
你知道答案吗 ?我还没找到.
谢谢.