gpt4 book ai didi

c++ - thrust::binary_search 在运行时失败,执行策略指定了用户流

转载 作者:行者123 更新时间:2023-11-30 05:00:35 25 4
gpt4 key购买 nike

thrust::binary_search 据我所知,除默认流外的所有段错误。我在文档中找不到任何描述这种限制的信息,所以我希望专家能启发我如何正确使用。

这是一个简单的例子。此测试代码创建一个未排序整数的 vector ,使用推力 vector 复制到设备。然后,它创建一个流并使用该流进行排序。但是,如果我尝试为该流上的二进制搜索例程指定执行策略,则会出现段错误。当然,在更复杂的情况下,我需要多个流来提高并发性。

#include <thrust/host_vector.h>
#include <thrust/device_vector.h>
#include <thrust/binary_search.h>
#include <iostream>
int main(void)
{
std::vector<int> data = {31, 16, 14, 55, 61, 18, 33, 88, 72};
thrust::host_vector<int> H(data);
thrust::device_vector<int> D = H;

cudaStream_t stream;
cudaStreamCreate(&stream);

thrust::sort(thrust::cuda::par.on(stream), D.begin(), D.end());
// So far so good
auto it1 = thrust::upper_bound(thrust::cuda::par, D.begin(), D.end(), 50);
// Also good
std::cout << "Test 1 = " << *it1 << std::endl;
// But the next call seg faults
auto it2 = thrust::upper_bound(thrust::cuda::par.on(stream), D.begin(), D.end(), 50);
std::cout << "Test 2 = " << *it2 << std::endl;
cudaStreamDestroy(stream);
return 0;
}

我在计算能力为 6.1 的设备上使用 CUDA 9.1。

默认流的上限按预期工作。使用执行策略 thrust::cuda::par.on(stream) 段错误的 stream 上限。我在文档中找不到关于此的任何智慧。这是正确的吗?有解决方法吗?

最佳答案

我是 Thrust 的维护者。由于对 CUDA 9.0 中引入的 Thrust 的新 CUDA 后端的疏忽,这是我之前的一个不幸错误。 TL;DR 是新的 CUDA 后端没有任何二进制搜索算法的专门化,因此使用通用顺序回退。出于某种原因,当流执行策略通过时,通用回退实现会爆炸。

我正在调查第二个问题的原因,但更令人担忧的是第一个问题(新后端没有实现二进制搜索算法)。该修复不会出现在下一个 CUDA 版本中,但有望在之后的版本中出现。然而,在下一个 CUDA 版本发布后,Thrust GitHub 将恢复服务,我将能够通过那里部署修复。

不幸的是,目前我没有其他解决方法。

GitHub Issue 921正在跟踪这个错误。

关于c++ - thrust::binary_search 在运行时失败,执行策略指定了用户流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50702906/

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