gpt4 book ai didi

c++ - VexCL:计算 vector 中高于最小值的值的数量

转载 作者:行者123 更新时间:2023-11-28 06:42:38 25 4
gpt4 key购买 nike

在 C++ 中使用 VexCL 我试图计算一个 vector 中高于某个最小值的所有值,我想在设备上执行此计数。默认的 Reductors 只提供 MIN、MAX 和 SUM 的方法,示例并没有非常清楚地展示如何执行这样的操作。这段代码很慢,因为它可能是在主机而不是设备上执行的:

int amount = 0;
int minimum = 5;

for (vex::vector<int>::iterator i = vector.begin(); i != vector.end(); ++i)
{
if (*i >= minimum)
{
amount++;
}
}

我正在使用的 vector 将包含大量值,比如数百万,而且大部分为零。除了高于最小值的数量之外,我还想检索包含这些值的 vector ID 列表。这可能吗?

最佳答案

如果你只需要计算最小值以上的元素,这会很简单

vex::Reductor<int, vex::SUM> sum(ctx);
int amount = sum( vec >= minimum );

vec >= minimum 表达式产生一个 1 和 0 的序列,然后 sum 计算 1。

现在,由于您还需要获取元素在最小值之上的位置,所以它变得有点复杂:

#include <iostream>
#include <vexcl/vexcl.hpp>

int main() {
vex::Context ctx(vex::Filter::Env && vex::Filter::Count(1));

// Input vector
vex::vector<int> vec(ctx, {1, 3, 5, 2, 6, 8, 0, 2, 4, 7});
int n = vec.size();
int minimum = 5;

// Put result of (vec >= minimum) into key, and element indices into pos:
vex::vector<int> key(ctx, n);
vex::vector<int> pos(ctx, n);

key = (vec >= minimum);
pos = vex::element_index();

// Get number of interesting elements in vec.
vex::Reductor<int, vex::SUM> sum(ctx);
int amount = sum(key);

// Sort pos by key in descending order.
vex::sort_by_key(key, pos, vex::greater<int>());

// First 'amount' of elements in pos now hold indices of interesting
// elements. Lets use slicer to extract them:
vex::vector<int> indices(ctx, amount);

vex::slicer<1> slice(vex::extents[n]);
indices = slice[vex::range(0, amount)](pos);

std::cout << "indices: " << indices << std::endl;
}

这给出了以下输出:

indices: {
0: 2 4 5 9
}

关于c++ - VexCL:计算 vector 中高于最小值的值的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25684280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com