- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个应用程序,其中 96% 的时间都花在 3D 纹理内存插值读取上(图中的红点)。
我的内核设计为在任意穿过纹理内存的线上进行 1000~ 次内存读取,每行一个线程(蓝线)。这条线非常密集,彼此非常靠近,以几乎平行的方向行进。
该图像显示了我正在谈论的概念。想象一下图像是来自 3D 纹理内存的单个“切片”,例如z=24
.图像重复所有 z
.
目前,我正在一行接一行地执行线程,但我意识到如果我在同一块中调用相邻的行,我可能能够从纹理内存局部性中受益,从而减少内存读取的时间。
我的问题是
最佳答案
由于这个问题越来越老,而且我提出的一些问题似乎没有答案,我将根据我构建 TIGRE 工具箱的研究给出一个基准答案。您可以在 Github repo 中获取源代码.
由于答案基于工具箱的特定应用程序,即计算机断层扫描,这意味着我的结果不一定适用于所有使用纹理内存的应用程序。此外,我的 GPU(见上文)相当不错,因此您的里程可能因不同的硬件而异。
具体情况
需要注意的是:这是一个锥形束计算机断层扫描应用程序。这意味着:
If I have 3D texture with linear interpolation, how could I benefit most from the data locality? By running adjacent lines in the same block in 2D or adjacent lines in 3D (3D neighbors or just neighbors per slice)?
How "big" is the cache (or how can I check this in the specs)? Does it load e.g. the asked voxel and +-50 around it in every direction? This will directly relate with the amount of neighboring lines I'd put in each block!
32x32 -> [18~25] ms
16x16 -> [14~18] ms
8x8 -> [11~14] ms
4x4 -> [25~29] ms
if
内核的条件会显着减慢它的速度,我对内核进行编程的方式是在确保不在图像的线上的一个点上开始采样,并在类似情况下停止。这是通过在图像周围创建一个虚构的“球体”来完成的,并且始终采样相同的数量,而与图像和线条本身之间的角度无关。
[t ~sqrt(2)*t]
,我已经检查过确实更长的时间是从线条和图像之间的角度是 45 度的倍数开始,更多的样本落在图像(纹理)内。
tex3d(tex, -5,-5,-5)
) 的采样是
计算免费 .没有时间花在越界阅读上。读取大量越界点比检查点是否落在图像内更好,如
if
条件会减慢内核,而越界采样的成本为零。
How does the interpolation applies to texture memory cache? Is the interpolation also performed in the cache, or the fact that its interpolated will reduce the memory latency because it needs to be done in the text memory itself?
cudaFilterModeLinear
)和最近邻插值(
cudaFilterModePoint
)。正如预期的那样,当添加最近邻插值时,速度会有所提高。对于
8x8
在我的电脑中具有前面提到的图像大小的块:
Linear -> [11~14] ms
Nearest -> [ 9~10] ms
关于cuda - 3D 纹理内存是如何缓存的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35937598/
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我试图用这种形式简单地获取数字 28 integer+space+integer+integer+space+integer我试过这个正则表达式 \\s\\d\\d\\s 但我得到了两个数字11 和
最近一直在学习D语言。我一直对运行时感到困惑。 从我能收集到的关于它的信息中,(这不是很多)我知道它是一种有助于 D 的一些特性的运行时。像垃圾收集一样,它与您自己的程序一起运行。但是既然 D 是编译
想问一下这两个正则表达式有区别吗? \d\d\d 与 \d{3} 我已经在我的本地机器上使用 Java 和 Windows 操作系统对此进行了测试,两者都工作正常并且结果相同。但是,当在 linux
我正在学习 Go,而且我坚持使用 Go 之旅(exercise-stringer.go:https://tour.golang.org/methods/7)。 这是一些代码: type IPAddr
我在Java正则表达式中发现了一段令我困惑的代码: Pattern.compile( "J.*\\d[0-35-9]-\\d\\d-\\d\\d" ); 要编译的字符串是: String string
我在 ruby 代码上偶然发现了这个。我知道\d{4})\/(\d\d)\/(\d\d)\/(.*)/是什么意思,但是\1-\2-\3-\4 是什么意思? 最佳答案 \1-\2-\3-\4 是 b
我一直在努力解决这个问题,这让我很恼火。我了解 D 运行时库。它是什么,它做什么。我也明白你可以在没有它的情况下编译 D 应用程序。就像 XoMB 所做的那样。好吧,XoMB 定义了自己的运行时,但是
我有两个列表列表,子列表代表路径。我想找到所有路径。 List> pathList1 List> pathList2 当然是天真的解决方案: List> result = new ArrayList>
我需要使用 Regex 格式化一个字符串,该字符串包含数字、字母 a-z 和 A-Z,同时还包含破折号和空格。 从用户输入我有02-219 8 53 24 输出应该是022 198 53 24 我正在
目标是达到与this C++ example相同的效果: 避免创建临时文件。我曾尝试将 C++ 示例翻译为 D,但没有成功。我也尝试过不同的方法。 import std.datetime : benc
tl;dr:你好吗perfect forwarding在 D? 该链接有一个很好的解释,但例如,假设我有这个方法: void foo(T)(in int a, out int b, ref int c
有什么方法可以在 D 中使用abstract auto 函数吗? 如果我声明一个类如下: class MyClass { abstract auto foo(); } 我收到以下错误: mai
有没有人为内存中重叠的数组切片实现交集?算法在没有重叠时返回 []。 当 pretty-print (使用重叠缩进)内存中重叠的数组切片时,我想要这个。 最佳答案 如果您确定它们是数组,那么只需取 p
我已经开始学习 D,但我在使用 Andrei Alexandrescu 所著的 The D Programming Language 一书中提供的示例时遇到了一些麻烦。由于 int 和 ulong 类
如何创建一个不可变的类? 我的目标是创建一个实例始终不可变的类。现在我只是用不可变的方法和构造函数创建了一个“可变”类。我将其称为 mData,m 表示可变。然后我创建一个别名 alias immut
不久前我买了《The D Programming Language》。好书,很有教育意义。但是,我在尝试编译书中列出的语言功能时遇到了麻烦:扩展函数。 在这本书中,Andrei 写了任何可以像这样调用
我在 D http://www.digitalmars.com/d/2.0/lazy-evaluation.html 中找到了函数参数的惰性求值示例 我想知道如何在 D 中实现可能的无限数据结构,就像
这个问题在这里已经有了答案: 12 年前关闭。 Possible Duplicate: Could anyone explain these undefined behaviors (i = i++
当前是否可以跨模块扫描/查询/迭代具有某些属性的所有函数(或类)? 例如: source/packageA/something.d: @sillyWalk(10) void doSomething()
我是一名优秀的程序员,十分优秀!