
[英]Num Threads trade-off in non-parallelizable work
我一直是个好孩子,并且并行化了我的计算着色器以执行 955 个线程进行 20 次迭代[numthreads(955, 1, 1)] void main( uint3 pos : SV_DispatchThreadID ) { ... for (uint i = 0; i < 2 ...
[英]Num Threads trade-off in non-parallelizable work
我一直是个好孩子,并且并行化了我的计算着色器以执行 955 个线程进行 20 次迭代[numthreads(955, 1, 1)] void main( uint3 pos : SV_DispatchThreadID ) { ... for (uint i = 0; i < 2 ...
[英]Compute shader best-practice/modern-style examples
我一直在以最糟糕的风格编写 gpgpu 计算着色器(即只有一个整体程序)。 我认为问题是我已经阅读了不是这样的虚拟代码,所以我希望有人能指出一些代码来学习风格。 我希望以更具功能性的风格进行编程(对于我的并行减少、蝴蝶等),并且想知道是否可以使用宏来实现某些目标。 (扫描被认为是 gpgpu 的原 ...
[英]Warp threads not SIMD synchronous
我正在查看Nvidia的并行缩减 示例。 如果tid < 32那么线程都应该在同一个 warp 中,所以指令应该是 SIMD 同步的,所以我们可以假设sdata[tid] += sdata[tid + 32]; 在sdata[tid] += sdata[tid + 16];之前完成所有线程sd ...
[英]There can be at most 65535 Thread Groups in each dimension of a Dispatch call
我有一个 DirectCompute 应用程序对图像进行计算(比如计算平均像素值、应用过滤器等等)。 对于某些计算,我只是将图像视为一个整数数组,并像这样调度计算机着色器: 结果正是预期值,因此计算是正确的。 尽管如此,在 runt 时,我在调试日志中看到以下消息: 此错误仅在调试日志中显示 ...
[英]DirectCompute shader (HLSL) has strange array size
我正在为计算着色器存储 uint 数组而苦苦挣扎。 我有以下着色器代码(重现问题的简单示例): 编译后,我检查编译器的输出以了解常量缓冲区项的偏移量和大小。 项目“uint UIntArray[10];” 令人惊讶的是,它的大小为 148 字节。 鉴于 uint 是 4 个字节,这很奇怪。 所以 ...
[英]DirectCompute multithreading performance (threads and thread groups) for multidimensional array processing
我知道 Disptach(x, y, z) 将定义实例化的线程组数, numthreads(n, m, p) 给出每个组的大小。 结合在一起,Dispatch 和 numthreads 给出了线程的总数。 我还了解到调度 arguments 用于将参数传递给每个线程。 问题: 1) I 组 J ...
[英]DirectCompute shader: how to get rid of warning X3205: 'round'
在计算着色器 model 5 中,我得到了双精度浮点值的一些计算结果。 我必须将值分配给 integer 变量,然后我收到警告: 我理解警告,但在我的情况下,在运行时浮点值永远不会超过 integer 可接受的值。 该代码产生了预期的结果,所以我想关闭特定违规行的警告。 我没有找到如何关闭特定警告 ...
[英]Implementing a SpinLock in a HLSL DirectCompute shader
我尝试在计算着色器中实现自旋锁。 但我的实现它似乎没有锁定任何东西。 这是我实现自旋锁的方法: 背景:我需要一个自旋锁,因为我必须计算一个大型二维数组中的数据总和。 总和是双倍的。 用单线程和双循环计算总和会产生正确的结果。 使用多线程计算总和会产生错误的结果,即使在计算总和时引入自旋锁以避免冲突也 ...
[英]DirectCompute: How to read from a RWTexture2D<float4>?
我有以下缓冲区: 计算着色器使用此缓冲区渲染计算的图像。 要在该纹理中写入像素,我只使用类似于以下的代码: 这非常有效,并且我的计算图像已正确显示在屏幕上。 现在,在计算着色器的某个阶段,我想读回一个已经计算出的像素并再次对其进行处理。 编译器返回错误: ...
[英]warning X3557: loop only executes for 0 iteration(s), forcing loop to unroll
编译器产生“警告X3557:循环仅执行0次迭代,强制循环展开”,我不明白为什么。 这是源代码。 它是用于HLSL的经过重新访问的itoa()函数,可在uint数组中生成结果的ascii代码。 我试图重写while循环,但这没有任何改变。 也尝试使用属性[fastopt]失败。 ...
[英]warning X4000: use of potentially uninitialized variable
HLSL编译器使用以下代码发出错误消息“ 警告X4000:使用可能未初始化的变量 ”: 我不明白那个警告。 令人讨厌的行中根本没有使用任何变量! 任何帮助表示赞赏。 ...
[英]Device took an unreasonable amount of time to execute its commands
我正在将C代码移植到HLSL(计算着色器)。 编译器对于for循环之一很着迷。 在运行时,显示设备驱动程序检测到不合理的时间来执行代码。 这是带有令人讨厌的for循环的部分源代码: 在运行时,我收到以下调试消息: D3D11错误:ID3D11Device :: Rem ...
[英]DirectX compute shader (HLSL): how to access individual characters in a string?
在DirectCompute着色器中,具有使用字符串类型参数的函数,如何访问各个字符? 例: 编译器抱怨S [I]:“错误X3121:索引表达式中期望的数组,矩阵,向量或可索引对象类型”。 任何想法? ...
[英]DirectX compute shader: how to write a function with variable array size argument?
我正在尝试在计算着色器(HLSL)中编写一个函数,该函数接受参数为不同大小的数组。 编译器总是拒绝它。 示例(不起作用!): 如果我在TestFunc()中给出一个数组大小,那么当调用TestFunc()传递该特定数组大小时,编译器会很高兴,但是拒绝使用另一个大小。 ...
[英]Drawing lines and characters in a texture2D (DirectCompute HLSL programming)
我进行了大量搜索,但没有找到如何使计算着色器在texture2D中绘制线条和字符的方法。 我的应用程序必须进行大量处理,并在Texture2D中生成一个位图,然后将其显示在屏幕上并下载回CPU,最后保存在文件中。 生成位图后,我必须画线(和其他简单的几何形状)以及字符串来注释位图。 我 ...
[英]DirectX/DirectCompute ByteAddressBuffer initialization failed
我无法从C ++应用程序初始化ByteAddressBuffer:每个API调用均成功,但是在着色器中,数据始终为0xFF。 要创建和初始化ByteAddressBuffer,我使用下面的函数。 pInitData指向包含RGB图像的缓冲区(uElementSize为3,uCount为像 ...
[英]DirectCompute CreateBuffer fails with error 0x80070057 (E_INVALIDARG)
我正在尝试在GPU内存中创建缓冲区以从CPU上传数据。 GPU访问将是只读的。 数据将用作计算着色器的输入缓冲区。 CreateBuffer()失败,错误为0x80070057(E_INVALIDARG)。 我阅读了文档,然后再次阅读,而没有发现导致失败的参数。 这是我标记故障 ...
[英]DirectX/DirectCompute CreateBuffer failure with error 0x80070057 (E_INVALIDARG)
我正在尝试在GPU内存中创建缓冲区以从CPU上传数据。 GPU访问将是只读的。 数据将用作计算着色器的输入缓冲区。 CreateBuffer()失败,错误为0x80070057(E_INVALIDARG)。 我阅读了文档,然后再次阅读,而没有发现导致失败的参数。 InitDev ...
[英]How to work with 8-bit char data in HLSL?
我正在将一些OpenCL代码转换为DirectCompute,并且需要在计算着色器中处理8位字符串,但找不到“字节”或“字符”的HLSL数据类型。 OpenCL支持“ char”类型,因此我期待有一个等效的类型。 定义和访问数据的最佳方法是什么? 似乎可以通过将数据视为一系列“ uin ...
[英]reading GPU resource data by CPU
这些天我正在学习directx11。 我一直被困在计算着色器部分。 所以我提出了四个资源和三个相应的观点。 不可变的输入缓冲区= {1,1,1,1,1} / SRV 不可变的输入缓冲区= {2,2,2,2,2} / SRV 输出缓冲器/无人机 用于读取的 ...