使用 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 提高性能的主要内容,如果未能解决你的问题,请参考以下文章

神经网络性能提升两倍,英特尔®深度学习加速技术和oneAPI推动大型强子对撞机研究

使用 WITH(NOLOCK) 提高性能

怎么提高电脑内存的性能及使用效率都有哪些方法

有效提高ThinkPHP的应用性能的几点建议

(36)C#使用引用(ref)来提高程序的性能

不使用被动侦听器来提高滚动性能(灯塔报告)