簡體   English   中英

使用DPC++ oneAPI提升性能

[英]Use DPC++ oneAPI to improve performance

我是 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;
    }

以下是該任務的 OpenCL kernel 的樣子:

#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;
    }
}

請注意,由於並行化,有一個小問題:如果恰好有一個命中,一切都很好。 然而,如果有不止一次命中,結果將是多次命中中的任意一次,並且是完全隨機的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM