我在 OpenCL 中进行数据并行处理,我想通过使用向量指令 (SIMD) 来增加吞吐量。为了使用 int4、double2 等,我需要梳理输入数据数组。做这个的最好方式是什么?
从
A[0] A[1] A[2] ... A[N] B[0] B[1] B[2] ... B[N] C[0]...C[N] D[0]...D[N]
作为一个组合缓冲区或单独的缓冲区
至
A[0] B[0] C[0] D[0] A[1] B[1] C[1] D[1] ... A[N] B[N] C[N] D[N]
N 可能高达 20000,现在翻倍。我正在使用 GCN GPGPU,首选双向量大小为 2。
- 我应该准备另一个内核来梳理特定向量宽度的数据吗?
- 我想 CPU 做同样的事情会很慢。