C++ 如何使用C++;放大器?

C++ 如何使用C++;放大器?,c++,C++,我在c中有以下循环++ dword result = 0; for ( int i = 0; i < 16; i++ ) { result |= ( value[i] << (unsigned int)( i << 1 ) ); } dword结果=0; 对于(int i=0;i

我在c中有以下循环++

dword result = 0;
for ( int i = 0; i < 16; i++ ) {
    result |= ( value[i] << (unsigned int)( i << 1 ) );
}
dword结果=0;
对于(int i=0;i<16;i++){

结果|=(值[i]以下代码是我认为您需要的代码的一部分。此代码将获取大量元素作为输入,并在CPU上预处理向量,然后在GPU上并行执行位移位操作。然后我设置av[元素]返回0,因为我使用该元素来存储最终结果。这很粗糙,但AMP对GPU上可以处理的数据类型有很大限制,所以我只使用现有数组中的一个额外元素。在位移位完成后,我对每个按位OR函数执行另一个并行。这一情况也发生在GPU,但它不太令人满意,因为每个操作都使用av[元素]对数组的任何给定元素进行ORing元素,这将造成瓶颈。您的树形结构将使此部分运行得更快,但我无法想出如何轻松完成该部分。事实上,此程序可以在相当旧的计算机上在几秒钟内处理1亿个元素。对于代码中的任何违反最佳做法的行为,请提前道歉;我是novi行政长官,守则如下:

#include <conio.h>
#include <amp.h>
#include <iostream>

using namespace concurrency;
using namespace std;

unsigned int doParallel(unsigned int);

unsigned int elements;

void main()
{
    int ch=NULL;
    cout<<"\nHow many elements to populate: ";
    cin>>elements;
    cout<<"The result is: "<<doParallel(elements);
    cout<<"\nPress 'X' to exit.";
    do
    {
        ch=_getch();
    } while (ch!='X' && ch!='x');
    exit(0);
}

unsigned int doParallel(unsigned int elements)
{
    vector<unsigned int> v(elements+1);

    for (unsigned int i = 0; i<elements+1;i++)
        {
            v[i]=i;
        }
    array_view<unsigned int,1> av(elements+1,v);

    parallel_for_each(av.extent,[=](index<1> idx)
        restrict(amp)
        {
            av[idx] = static_cast<unsigned int>(av[idx])<<1;
        });
    av[elements]=0;
    parallel_for_each(av.extent,[=](index<1> idx)
    restrict(amp)
    {
        av[elements] |= static_cast<unsigned int>(av[idx]);
    });

    return av[elements];
}
#包括
#包括
#包括
使用名称空间并发;
使用名称空间std;
无符号整数双并行(无符号整数);
无符号整数元素;
void main()
{
int ch=NULL;
coutelements;

有一个想法。产生16个线程,它们执行
result |=(值[i]另一个想法:展开循环以帮助编译器?