【发布时间】:2012-12-10 09:56:30
【问题描述】:
我正在尝试优化我的代码,利用多核处理器来复制任何可操作的大型密集数组。
对于复制:我有一个大的密集数组(大约 6000x100000),我需要从中拉出 15x100000 个子数组来执行多个计算。管道由许多由多核 blas 处理的线性代数函数组成。与线性代数相比,提取数据的时间是否真的很重要是一个悬而未决的问题,但我想谨慎起见并确保数据复制得到优化。
对于操作:我有许多不同的函数可以通过元素或行来操作数组。最好是每一个都是多核的。
我的问题是:最好使用正确的框架(OpenML、OpenCL)并让所有的魔法发生在编译器上,还是有更好的函数/库可以更快地做到这一点?
【问题讨论】:
-
我最初的想法之一是,如果您的矩阵以行优先顺序存储,那么您可以在不进行任何复制的情况下引用 15 行部分。
-
是的,但最终还是需要复制,因为我不想更改数据。
-
子数组为 15x1000000,初始为 6000x100000。 1000000 vs 100000,错字在哪里?
-
1000000 是错字。应该是 100000
-
对于在 GPU 上处理非常大的矩阵是可行的方法,请查看 ViennaCL 项目。
标签: c++ arrays performance parallel-processing opencl