问题标签 [directcompute]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
150 浏览

directx - DirectCompute 和多个设备?

是否可以像使用 CUDA 一样在多个设备 (GPU) 之间拆分工作?这在代码中看起来如何?

很难找到适用于 DirectCompute 的文档,并且 SDK 没有显示任何示例。

0 投票
1 回答
668 浏览

hlsl - 直接计算hlsl numthreads?

由于您已经定义了调度计算着色器时要执行的线程组,所以着色器文件中的数字表示什么?示例:[numthreads(1, 1, 1)]

0 投票
1 回答
665 浏览

hlsl - DirectCompute写入缓冲区速度

我正在研究粒子 sim 并且遇到了一些瓶颈,使用 UAV 写入 RWStructured 单浮点缓冲区的速度太慢了大约 10 倍。从实验来看,带宽似乎并不短缺,但访问时间本身就让它陷入困境。追加写入是不可能的,因为传出数据需要按特定顺序排列。这是在 DX10/SM4 硬件上,所以这里有几个问题:有没有办法加快速度(除了写入更大的数据块,因为着色器的输出是不连续的)?如果不是,那么 DX11 级硬件与无人机相比是否更快?

0 投票
1 回答
1898 浏览

c++ - HLSL 缓冲区步幅和线程 - 这里发生了什么?

我对 DirectCompute 技术真的很陌生,并且一直在尝试从 msdn 网站上的文档中学习,至少可以这么说。

我想制作一个基本的 hlsl 文件,它接受一个 4x4 矩阵和一个 4xN 矩阵并返回相乘的结果。但是在花了一些时间玩代码之后,我发现了一些我不理解的奇怪东西——主要是我传入的线程如何处理缓冲区和输出数据。

对于所有这些示例,我传入两个 16 浮点缓冲区并取出一个 16 浮点缓冲区,然后使用 4x1x1 分组进行调度 - 我可以向您展示代码,但老实说,我还不知道什么可以帮助您。如果您想查看我的 C++ 代码的一部分,请告诉我。

使用以下代码:

我得到以下值:

这对我来说很有意义 - 缓冲区被解析为 4 个线程,每个线程执行 1 个 float4 分组。

使用以下代码:

我得到以下值:

并使用我要运行的实际代码:

我得到以下值:

我可以说我在这里遗漏了一件关键的事情,但是对于我的一生,我找不到合适的文档来告诉我这些是如何工作的。有人可以帮我理解这段代码发生了什么吗?

谢谢你的时间,

扎克

另外请注意,此代码是使用 Microsoft DirectX SDK(2010 年 6 月)\Samples\C++\Direct3D11\BasicCompute11 Sample available 编写的。如果我做错了什么,请随时告诉我。我是 HLSL 的新手。

编辑:我的缓冲区创建代码。

尝试 .1,.2,.3,.4 ...

把这个弄出来:

0 投票
2 回答
3417 浏览

multithreading - GPU 上的线程和线程组

我想知道我可以在 GPU 上调度的线程/线程组的“网格”。我正在使用 Direct Compute,所以我将给出一个使用该 API 的具体示例。例如,如果我调用 Dispatch(2,2,2),我理解它总共分派了 2x2x2 = 8 个线程组。但是,如果我调用 Dispatch(8,1,1),它也调度 8x1x1 = 8 个线程组,有什么区别?有性能差异吗?

PS与GPU上的线程相同的问题。在计算 (.hlsl) 文件中声明的 numthreads(2,2,2) 和 numthreads(8,1,1) 有什么区别?

任何帮助,将不胜感激。

0 投票
1 回答
219 浏览

memory - 使用 HLSL 对显卡进行无形压力 - 如何对内存进行压力?

我一直在开发一个不可见的(阅读:不产生任何视觉输出)压力源来测试我的显卡的功能(并且作为对 DirectCompute 的一般探索,我对它很陌生)。我现在有以下代码,我很自豪:

这对前 40 个 2 的幂运行Lucas Lehmer 检验。当我在定时循环中调度此代码并使用GPU-Z查看我的显卡统计信息时,我的 GPU 负载在此期间飙升至 99%。我对此很满意,但我也注意到,满载 GPU 产生的热量实际上非常小(我的温度上升了大约 5 到 10 摄氏度,远不及跑步时的热量跳跃,说,无主之地2)。我的想法是我的大部分热量来自内存访问,因此我需要在整个运行过程中包含一致的内存访问。我的初始代码如下所示:

0 投票
2 回答
196 浏览

image-processing - GPU 上的线程

我正在使用 DirectCompute 在 GPU 上进行一般计算。目前,我正在尝试对分辨率为 1920x1080 的纹理进行操作。我有一个 Dispatch(2, 1080, 1) 和 numthreads(960, 1, 1) 根据我的计算,它们准确地覆盖了我的图像,每个像素一个线程。

现在,据我了解,所有线程都应该同时运行,对吧?但是,在我的代码中,如果像素为黑色,我不会进行任何计算。因此,当我的大部分图像为黑色时,我注意到性能明显提高。但是,如果一个物体挡住了屏幕,性能就会急剧下降。

我的问题是:如果所有线程都并行运行,处理一帧的速度将由性能最差的线程决定,本质上运行在黑色像素上的线程将处于空闲状态,对吧?那么,为什么在处理更多像素时我会看到速度变慢?他们应该同时这样做。还是我把这一切都搞错了?

任何帮助,将不胜感激。

0 投票
2 回答
1109 浏览

directx - 数据何时复制到 GPU 内存?

我的程序中有一些众所周知的步骤:

数据是在哪一步复制到 GPU 上的?

0 投票
1 回答
150 浏览

c++ - 为什么 Dispatches 连续开始需要不同的时间?

我有这个程序:

第一次迭代仅持续 26 毫秒,而第二次 46 毫秒?

以防万一着色器:

但我不认为每次开始都需要不同的时间。

有趣的是,如果我注释掉 ''if (i == STEPS / 2)'' 行,两半花费几乎相同的时间。

编辑:据我目前所见,这是因为兑现

0 投票
1 回答
2635 浏览

directx - DirectX 计算着色器是否支持共享内存中的二维数组?

我想groupshared在 DirectX 计算着色器中使用内存来减少全局内存带宽并希望提高性能。我的输入数据是 a Texture2D,我可以使用 2D 索引访问它,如下所示:

我想有一个共享内存的二维数组来缓存输入数据的一部分,所以我尝试了明显的:

它不会编译。错误消息说syntax error: unexpected token ','

有没有办法拥有一个二维共享内存数组?如果不是,那么处理存储在 1D 共享内存数组中的 2D 数据的好技术是什么?