l***j 发帖数: 300 | |
e***e 发帖数: 3872 | 2 第一篇的第三页http://www.beyond3d.com/content/articles/31/3有些分析
是make sense的。我自己的经验,用CUDA做了个平滑mesh各顶点normal的程序,
G80的架构对内存访问pattern比较random时(比如index array)性能下降很多—
大约80-90%的clocks是访存占用的。我认为cache不够大,没有L2 Cache,multi-
processor间对cache的固定分配方式,都是G80可以改进的——在这篇文章中这些
也都是Intel在纸上画好的饼。
【在 l***j 的大作中提到】 : http://www.beyond3d.com/content/articles/31 : http://www.theinquirer.net/default.aspx?article=37548
|
l***j 发帖数: 300 | 3 如果把Memory做成 Tiled 会不会提高 cache Performance?
如果加入一个非常大的Vector Unit 和足够多的 vector register 提前把内存 load
到寄存器中然后在寄存器中进行运算是否可行?
如果用大量的 Thread 来并行处理这个问题是否可行呢。
不是很了解你所提到的Mesh 算法,只是想知道以你的经验,这样的问题在Larrabee 和
G80 上做哪个更容易一点,性能更好一点。 |
e***e 发帖数: 3872 | 4 我不太明白你讲的tiled memory,是指memory分成banks,每个bank都可以同时
被访问么?按Cuda手册上的说明,shared memory, 相当于L1 cache是分bank的,
但global memory不是。另外一点就是16个multiprocessors各自有自己的shared
memory, 16k,但彼此不能互相访问。
cuda建议的访存模式就是像你说的,但因为cache资源限制,每个block实际能
有效load的数据就有限,增加thread的数量可以把内存的latency平衡掉,但不能
解决oversize的数据访问问题。举例来说,如果数据是一个数组,里边都是需要
计算的数值(如卷积滤波),那么当滤波核尺寸超过cache的大小时,就无法有效
利用cache了。另外一个例子是数组中是另一个数组的索引,这种情况几乎必然带
来随机访存,没有L2 Cache,整体latency就会很高。
如果G80有4M的l2 cache, 并且可以为所有的processing unit访问的话,情况
会好得多。希望G85或者G90在加上双精度的同时把这个问题
【在 l***j 的大作中提到】 : 如果把Memory做成 Tiled 会不会提高 cache Performance? : 如果加入一个非常大的Vector Unit 和足够多的 vector register 提前把内存 load : 到寄存器中然后在寄存器中进行运算是否可行? : 如果用大量的 Thread 来并行处理这个问题是否可行呢。 : 不是很了解你所提到的Mesh 算法,只是想知道以你的经验,这样的问题在Larrabee 和 : G80 上做哪个更容易一点,性能更好一点。
|
l***j 发帖数: 300 | 5 Tiled Memory 是指将一个 Surface 分块 (Tile) 每个 Tile 内的地址是连续的。如
果算法可以并行地处理一个块的话,需要加载到 Cache 中的内存就比较少了。
Larrabee 有共享的 L2 Cache.
你有没有研究过用 Cuda 来处理 Irregular Z buffer 的问题?对于这样复杂的数据
结构是否可通过 Cuda 来提高 Performance? |
e***e 发帖数: 3872 | 6
举个例子吧
也举个例子吧
【在 l***j 的大作中提到】 : Tiled Memory 是指将一个 Surface 分块 (Tile) 每个 Tile 内的地址是连续的。如 : 果算法可以并行地处理一个块的话,需要加载到 Cache 中的内存就比较少了。 : Larrabee 有共享的 L2 Cache. : 你有没有研究过用 Cuda 来处理 Irregular Z buffer 的问题?对于这样复杂的数据 : 结构是否可通过 Cuda 来提高 Performance?
|