Opencl 像内核中的变量一样存储的小数组?
在我的OpenCL内核中,我需要使用通常应该是一个由4个条目组成的小数组,但由于我担心该数组将如何存储(可能存储在比常规变量慢得多的内存中),因此我使用4个单独的变量和一个switch case语句来访问基于索引的正确数组 有没有一种方法可以让一个4 x float4的小数组像4个独立的float4变量一样快速无缝地工作 下面是我要做的:我的内核通过遍历要应用于Opencl 像内核中的变量一样存储的小数组?,opencl,Opencl,在我的OpenCL内核中,我需要使用通常应该是一个由4个条目组成的小数组,但由于我担心该数组将如何存储(可能存储在比常规变量慢得多的内存中),因此我使用4个单独的变量和一个switch case语句来访问基于索引的正确数组 有没有一种方法可以让一个4 x float4的小数组像4个独立的float4变量一样快速无缝地工作 下面是我要做的:我的内核通过遍历要应用于v的操作列表来生成单个float4变量v。它按顺序运行,列表中的一个接一个操作应用于v,但是在该列表中可以有一些括号/括号,它们就像在算
v
的操作列表来生成单个float4变量v
。它按顺序运行,列表中的一个接一个操作应用于v
,但是在该列表中可以有一些括号/括号,它们就像在算术中一样,在将括号和其余括号的结果带回来之前,隔离一组要单独完成的操作
因此,如果一个支架被打开,那么我应该临时将v
的值存储到v0
(表示支架深度0处的当前值),然后v
可以重置为0并在支架内执行操作,如果在这个括号内还有另一个括号,我会把v
放进v1
中,然后再把v2
和v3
放进嵌套的括号中。例如,我可以在一个括号内应用乘法,它只会影响该括号内创建的其他内容,而不会影响其余内容
一旦括号关闭,我将检索例如
v3
并向其添加v
,最后所有括号都将关闭,v
将表示一系列操作的最终期望值并写入全局缓冲区。使用switch-case语句根据当前的括号深度选择正确的变量是可行的,但这非常荒谬,因为这就是数组的用途。因此,我不确定最好的做法是什么。从我所看到的情况来看,编译器通常会将声明在私有
地址空间中的小数组直接放在寄存器中。当然,这不是一个保证,可能有不同的参数介入优化的激活,例如:
- 数组大小李>
- 记录压力李>
- 溢出成本李>
- 等等
我认为那没用。无论如何,编译器都会跨作用域进行优化。只需做简单的事情,让优化器完成它的工作。然后,如果您注意到次优的codegen,您可能会开始考虑替代解决方案,但不是在此之前。从我所看到的,编译器通常会将声明在
专用
地址空间中的小数组直接放在寄存器中。当然,这不是一个保证,可能有不同的参数介入优化的激活,例如:
- 数组大小李>
- 记录压力李>
- 溢出成本李>
- 等等
我认为那没用。无论如何,编译器都会跨作用域进行优化。只需做简单的事情,让优化器完成它的工作。然后,如果您注意到不理想的代码生成,您可能会开始考虑替代解决方案,但不是在此之前。哦,很高兴知道。那应该是什么样的数组呢?二等兵?太好了,我试试看,谢谢!哦,很高兴知道。那应该是什么样的数组呢?二等兵?太好了,我试试看,谢谢!