フローグラフ・アナライザーは、グラフ計算の問題調査、デバッグ解析を行うインテル® Advisor の機能です。SYCL* ランタイムはワークから送信された非同期タスクのグラフを構築するため、フローグラフ・アナライザーを使用すると、非同期タスクグラフをその実行トレースを視覚化して操作できます。このツールには次の機能が含まれます。
SYCL* アプリケーションのデータ収集サポートは、現在 Linux* でのみサポートされています。
次のサンプルコードは、2 つのベクトルを加算する SYCL* アプリケーションの簡単な例を示しています。以降のセクションでは、この例を基に説明します。
#include <CL/sycl.hpp>
#include <iostream>
#define VECTOR_SIZE 16384
using namespace cl::sycl;
void vec_add(queue &q, const float A[], const float B[], float C[],
const int size) {
// バッファーを作成
buffer<float, 1> bufA(A, range<1>(VECTOR_SIZE));
buffer<float, 1> bufB(B, range<1>(VECTOR_SIZE));
buffer<float, 1> bufC(C, range<1>(VECTOR_SIZE));
q.submit([&](handler &cgh) {
auto Acc = bufA.get_access<access::mode::read>(cgh);
auto Bcc = bufB.get_access<access::mode::read>(cgh);
auto Ccc = bufC.get_access<access::mode::write>(cgh);
cgh.parallel_for<class saxpy_kernel>(range<1>(size), [=](id<1> idx) {
Ccc[idx[0]] = Acc[idx[0]] + Bcc[idx[0]];
});
});
}
int main(int argc, char **argv) {
if (argc < 2) {
std::cout << "Usage:- " << argv[0] << " [cpu, gpu]\n";
return 1;
}
if (argc < 2) {
std::cout << "Usage:- " << argv[0] << " [cpu, gpu]\n";
return 1;
}
float A[VECTOR_SIZE], B[VECTOR_SIZE], C[VECTOR_SIZE];
if (std::string("cpu") == argv[1]) {
cpu_selector device;
queue q(device);
vec_add(q, A, B, C, VECTOR_SIZE);
} else if (std::string("gpu") == argv[1]) {
gpu_selector device;
queue q(device);
vec_add(q, A, B, C, VECTOR_SIZE);
}
return 0;
}