使用 DPC++ oneAPI 提高性能
Posted
技术标签:
【中文标题】使用 DPC++ oneAPI 提高性能【英文标题】:Use DPC++ oneAPI to improve performance 【发布时间】:2020-12-06 17:33:07 【问题描述】:我是 OpenCL/OneAPI 的新手。如何更改此嵌套循环以使用 oneAPI GPU:
try
for (int i = 0; i < count; i++)
for (int j = 0; j < count; j++)
if (a_array[i] * a_array[j] == max)
p_found = a_array[i];
q_found = a_array[j];
throw "found";
catch (...)
std::cout << "q = " << q_found << " and p = " << p_found << std::endl;
【问题讨论】:
【参考方案1】:以下是该任务的 OpenCL 内核的外观:
#define count 1024
#define max 1.0f
kernel void find(const global float* a_array, gloabl float* pq_found)
const uint n = get_global_id(0); // parallelized across nested double loop
cosnt uint i=n/count, j=n%count;
const float a_arrayi=a_array[i], a_arrayj=a_array[j];
if(a_arrayi*a_arrayj==max)
pq_found[0] = a_arrayi;
pq_found[1] = a_arrayj;
请注意,由于并行化,有一个小麻烦:如果恰好有一个命中,一切都很好。但是,如果有多个命中,则结果将是多个命中之一,并且完全随机。
【讨论】:
以上是关于使用 DPC++ oneAPI 提高性能的主要内容,如果未能解决你的问题,请参考以下文章