【发布时间】:2012-12-09 16:12:34
【问题描述】:
我在 c++ 中有以下循环
dword result = 0;
for ( int i = 0; i < 16; i++ ) {
result |= ( value[i] << (unsigned int)( i << 1 ) );
}
我想在 amp 中并行化它。我知道它可能会比上面的实际非并行版本慢,但我想这样做是为了了解更多关于 AMP 的知识。
我的想法是并行遍历值数组:
并用newarray[0] = value[0] << (unsigned int)(0 << 1 )、newarray[1] = value[1] << (unsigned int)(1 << 1 ) 等填充一个新数组。然后我将在树结构中并行地 OR 数组中的值(见图)。
我试图将这个想法放在一些简单的 c++ amp 代码中,但我没有成功,所以任何帮助都将不胜感激。
感谢您对此事的考虑,期待回复。
【问题讨论】:
-
这是一个想法。生成 16 个执行
result |= ( value[i] << (unsigned int)( i << 1 ) );的线程,其中i是线程构造函数中传递的值。同时使用mutexes 锁定result。这应该适用于 c++11 的thread。我不知道什么是 AMP,所以无能为力:) -
另一个想法:展开循环以帮助编译器?
标签: c++