1

C ++ AMPでは、どのようにしてすべてのC ++ AMPアクセラレータを検出して列挙しますか?

Don McCradyは、エミュレートされていないアクセラレータを列挙するアプリをここで配布しました。DX11カード(GTX 260)を持っていましたが、利用可能なアクセラレータが見つかりませんでした。Daniel Mothは、ここで個々のアクセラレータをクエリする方法を示していますが、C ++ AMP呼び出しを使用してすべての(エミュレートされたおよび非)アクセラレータを列挙する方法を見つけることができませんでした。

4

2 に答える 2

6

とてもシンプルなようです:concurrency::get_accelerators();Daniel Mothのコメント

VS 11 Developer Previewビットでは、単にconcurrency :: get_accelerators();を呼び出します。ベータ版では、いつでもそれを見つけやすくするために取り組んでいます。

これが私のコードです:

#include <iostream>
#include "stdafx.h"
#include "amp.h"

using namespace std;
using namespace concurrency;

void inspect_accelerators()
{
    auto accelerators = accelerator::get_all();
    for_each(begin(accelerators), end(accelerators),[=](accelerator acc){ 
        wcout << "New accelerator: " << acc.description << endl;
        wcout << "is_debug = " << acc.is_debug << endl;
        wcout << "is_emulated = " << acc.is_emulated <<endl;
        wcout << "dedicated_memory = " << acc.dedicated_memory << endl;
        wcout << "device_path = " << acc.device_path << endl;
        wcout << "has_display = " << acc.has_display << endl;                
        wcout << "version = " << (acc.version >> 16) << '.' << (acc.version & 0xFFFF) << endl;
    });
}

アップデート1:

VS 11ベータ版では、これはアクセラレーター:: get_all();になりました。

于 2011-09-23T19:29:03.663 に答える
1

ここに私のブログからの答えを再投稿してくれてありがとう:-)

あなたはあなたの質問にサイドコメントをしました:

「DX11カード(GTX 260)を持っていましたが、利用可能なアクセラレータが見つかりませんでした。」

ドンのユーティリティがあなたのカードを見つけられなかった場合、それはDX11カードではないか、彼のユーティリティにバグがあり、彼に再現を報告していただければ幸いです。ただし、ベンダーのサイトで、GTX260がDX10カードであることを確認しました。したがって、残念ながら、これはC++AMPコードの適切なターゲットにはなりません...

乾杯

ダニエル

于 2011-09-25T23:44:37.913 に答える