小编mTO*_*ger的帖子

使用Opencl有效地找到最小的大型数组

我正在开发opencl中的层次聚类算法.对于每个步骤,我在一个非常大的数组中找到最小值(大约10 ^ 8个条目),这样我就知道哪些元素必须组合成一个新的簇.最小值的识别必须进行9999次.使用我当前的内核,找到最小值(在所有迭代中累积)大约需要200秒.我是如何解决这个问题的方法是将数组分成2560个大小相同的片段(我的Radeon 7970上有2560个流处理器),并找到每个片段的最小值.我运行第二个内核,将这些最小值组合成全局最小值.

有没有更有效的方法来解决这个问题?最初的想法是通过使用OpenCL来加速HCA,但是识别最小值所花费的时间比CPU上的matlab HCA长得多.我究竟做错了什么?

__kernel void findMinValue(__global float * myArray, __global double * mins, __global int * elementsToWorkOn, __global int * arraysize){
int gid = get_global_id(0);
int minloc = 0;
float mymin = INFINITY;
int eltoWorkOn = *elementsToWorkOn;
int offset = gid*eltoWorkOn;
int target = offset + eltoWorkOn;

if (offset<*arraysize){
    //make sure the array size is not exceeded
    if (target > *arraysize){
        target = *arraysize;
    }

    //find minimum for the kernel
    for (int i = offset; i < …
Run Code Online (Sandbox Code Playgroud)

c++ hierarchical-clustering opencl

5
推荐指数
1
解决办法
2730
查看次数

标签 统计

c++ ×1

hierarchical-clustering ×1

opencl ×1