VS程序在调试模式下会崩溃,但在发布模式下不会崩溃?
我正在vs 2012中运行以下程序,以尝试推力功能找到: #include "cuda_runtime.h" #include "device_launch_parameters.h" #include #include #include int main() { thrust::device_vector input(4); input[0] = 'a'; input[1] = 'b'; input[2] = 'c'; input[3] = 'd'; thrust::device_vector::iterator iter; iter = thrust::find(input.begin(), input.end(), 'a'); std::cout
0 2023-11-23
编程技术问答社区
如何在visual studio 2010中用parallel nsight调试cuda推力函数
我正在使用Visual Studio 2010,Parallel Nsight 2.2和CUDA 4.2进行学习.我的系统是Windows 8 Pro X64. 我打开了radix排序项目,该项目由CUDA Computing SDK在VS中包含,并没有错误地进行编译.排序代码使用推力库: if(keysOnly) thrust::sort(d_keys.begin(), d_keys.end()); else thrust::sort_by_key(d_keys.begin(), d_keys.end(), d_values.begin()); 我想知道如何将排序功能分配到CUDA内核,因此我试图在上面的行前面添加断点,并以调试模式编译了该项目.但是,当我使用并行nsight进行CUDA调试时,总会出现"没有断点的源通信". 所以,我的问题是: 如何使用平行的Nsight在Visual Studio中调试CUDA推力程序? 或者是否有人可以通过
0 2023-11-23
编程技术问答社区
根据各自包含全局地址的索引向量,将两个不同长度的向量拼接成具有推力的共同长度的新向量
这个问题一直在我的脑海中.我从这个论坛中学习了大量的C ++和CUDA.以前,我用大量有条件的语句在Fortran序列号中编写了以下内容,并且使用GoTOS,因为我找不到一种聪明的方法. 这是问题. 给定4个向量: int indx(nshape); float dnx(nshape); /* nshape > nord */ int indy(nord); float dny(nord); Indx和Indy是包含全局坐标的索引向量(分别为DNX的键,DNY,DNY).在解析此所需的隔离/剪接功能之前,它的全局范围是未知的.所知的只是可能的局部范围的长度,可以是[0,nord*nord]和向量Indx和Indy中的最大值和最小值. 我想创建包含DNX和DNY的原始值的相同长度的新向量DN1和DN2,但已扩展到将原始向量DNX和DNY与ZEROS一起使用,以适用于所有不包含的全局坐标另一个向量.它们将形成需要全局地址对齐的外部产品的向量. 我无法在网络上找
0 2023-11-17
编程技术问答社区
CUDA推力库:如何创建整数的host_vector的host_vector?
在C ++中为了创建一个具有10个整数向量的向量,我将执行以下操作: std::vector > test(10); ,由于我认为推力使用了与我尝试这样做的STL相同的逻辑: thrust::host_vector > test(10); 但是,我遇到了太多令人困惑的错误.我尝试做: thrust::host_vector > test; 它有效,但是我无法在此矢量中添加任何内容.做 thrust::host_vector temp(3); test.push_back(temp); 会给我同样的错误(在这里粘贴太多). 一般而言,当使用推力时,它是否在使用host_vector和stl的vector? 之间有所不同 预先感谢您 解决方案 推力容器仅为POD(普通
2 2023-11-17
编程技术问答社区
当键是由zip_迭代器处理的元组时,CUDA推力按键排序#39;具有自定义比较谓词的
我在这里查看了很多问题,但有很多,尽管有一个小变化.我正在尝试用zip_iterator作为复合密钥对值进行排序. 具体来说,我有以下功能: void thrustSort( unsigned int * primaryKey, float * secondaryKey, unsigned int * values, unsigned int numberOfPoints) { thrust::device_ptr dev_ptr_pkey = thrust::device_pointer_cast(primaryKey); thrust::device_ptr dev_ptr_skey = thrust::device_pointer_cast(secondaryKey); thrust::device_ptr dev_ptr_values = thrust::device_pointer_cast(values);
12 2023-10-27
编程技术问答社区
在CUDA中使用Thrust时对内核的启动进行计时
内核在CUDA发射通常是异步的,这(据我了解)意味着,一旦CUDA内核启动,控制控制就会立即返回到CPU.当GPU忙碌的数字处理时,CPU继续做一些有用的工作 除非使用cudaThreadsynchronize()或cudaMemcpy(). 现在,我刚刚开始使用推力 cuda库.是函数呼叫吗? 同步还是异步? 换句话说,如果我调用thrust::sort(D.begin(),D.end()); d是设备向量,那么使用 测量排序时间是有意义的 start = clock();//Start thrust::sort(D.begin(),D.end()); diff = ( clock() - start ) / (double)CLOCKS_PER_SEC; std::cout
2 2023-10-21
编程技术问答社区
用元组累积器减少推力
我想在thrust::tuple的thrust::host_vector上使用thrust::reduce.因为没有预定义的thrust::plus>我自己写了自己的书,并使用了thrust::reduce的变体和四个参数. 由于我是一个很好的公民,所以我将自定义版本的plus放在自己的名称空间中,在那里我将主要模板简单地放在了thrust::tuple中,将主模板简单地放在. . #include #include #include #include #include namespace thrust_ext { namespace detail { // https://stackoverflow.com/a/2
2 2023-10-16
编程技术问答社区
如何使用CUDA推力执行策略来覆盖推力的低级设备存储器分配器
我想覆盖低级CUDA设备内存分配器(以throust :: system :: cuda :: cuda :: malloc :: malloc()),以便它使用自定义分配器而不是直接调用cudamalloc()调用主机(CPU)线程. 这可能吗?如果是这样,是否可以使用推力"执行策略"机制进行操作?我尝试了这样的模型: struct eptCGA : thrust::system::cuda::detail::execution_policy { }; /// overload the Thrust malloc() template function implementation template __host__ __device__ void* malloc( eptCGA, size_t n ) { #ifndef __CUDA_ARCH__ return MyMalloc( n ); /* (call
6 2023-10-15
编程技术问答社区
当我使用cuda时,如何从std::map中搜索值?
我在std :: map中存储了一些东西,将字符串映射到向量.它的键和值看起来像 key value "a"-----[1,2,3] "b"-----[8,100] "cde"----[7,10] 对于每个线程,它需要处理一个查询.查询看起来像 ["a", "b"] 或 ["cde", "a"] 因此,我需要从地图中获取价值,然后做一些其他工作,例如组合它们.因此,对于第一个查询,结果将为 [1,2,3,8,100] 问题是,线程如何访问地图并通过键找到值? 首先,我尝试将其存储在全球内存中.但是,看起来它只能将数组从主机传递到设备. 然后我尝试使用推力,但是我只能使用它来存储向量. 我还有其他方法可以使用吗?还是我忽略了一些推力方法?谢谢! ** ps:我不需要修改地图,我只需要从中读取数据. 解决方案 我相信,除非您有大量查询,否则您不太可能会从GPU上进行任何此操作,除非您一次或至少分批可用.
2 2023-09-30
编程技术问答社区
如何将std::vector<thrust::device_vector<int>>转换成int**?
我正在研究以前的处理已产生(大)thrust::device_vector s的(big)thrust::device_vector s的应用程序,每个thrust::device_vector thrust::device_vector s,每个长度相同(但该长度也是可变的).我需要将其转换为设备上的原始指针以将其传递到CUDA内核. 我做了下面的过程,据我所知,该过程应该留在设备上的指针上,rawNumberSquare[0]和rawNumberSquare[1]分别包含指向numberSquareOnDevice[0][0]和numberSquareOnDevice[1][0]的指针.因此,在我看来,rawNumberSquare[i][j](i,j = 0,1)都是该程序分配的所有位置,并且合法访问. 但是,当内核试图访问这些位置时,值是错误的,并且该程序以非法内存访问而崩溃. #include "cuda_runtime.h" #include "device
8 2023-09-30
编程技术问答社区
向量结构的迭代器在推力中的作用
我试图以这种方式访问​​向量元素 struct point { unsigned int x; unsigned int y; }; ... thrust::device_vector devPoints(hPoints.begin(), hPoints.end()); for(thrust::device_vector::iterator iter = devPoints.begin(); iter != devPoints.end(); iter++) { std::cout x y
6 2023-09-30
编程技术问答社区
如何使用CUDA/Thrust对两个数组/向量中的一个数值进行排序?
这是关于编程的概念问题. 总而言之,我有两个阵列/向量,我需要对一个变化进行分类,以便在另一个方面进行传播,以便如果我对Arrayone进行排序,则每次交换 - Arraytwo也会发生同一件事.现在,我知道STD :: STORS允许您定义一个比较功能(我假设的自定义对象),并且我正在考虑定义一个同时交换Arraytwo. 所以我想要的是 - 使用cuda. 这是我的不确定性上升的地方,从本质上讲,我想使用推力库进行类型.它支持自定义比较函数的定义吗?如果是这样,我仍然还没有弄清楚如何传播Arraytwo的变化(因为它将基于CUDA). 我真的没有时间在CUDA上实现自定义并行QuickSort,尽我所能/想要. 原因 本质上,我需要对一堆变量阵列进行分类和计算(想想回归树).自然,我需要尽快这样做,基于CPU的排序还不够快. #update 我应该强调,我在主机上的两者进行排序没有问题,我正在寻找一种使用 cuda 的解决方案.谢谢.
8 2023-09-29
编程技术问答社区
如何在CUDA上对数组进行部分排序?
问题 提供了我有两个数组: const int N = 1000000; float A[N]; myStruct *B[N]; a中的数字可以是正面的或负的(例如A[N]={3,2,-1,0,5,-2}),我如何使数组a 部分排序(所有正值首先,不需要分类,然后是负值)(例如A[N]={3,2,5,0,-1,-2}或A[N]={5,2,3,0,-2,-1})在GPU上?数组B应根据A(a是键,B为值)更改. 由于A,B的比例可能很大,因此我认为应该在GPU上实现这种算法(,尤其是在CUDA上,因为我使用此平台).我当然知道thrust::sort_by_key可以做这项工作,但是它确实会付出额外的工作 有人遇到了这种问题吗? 推力示例 thrust::sort_by_key(thrust::device_ptr (A), thrust::device_ptr ( A + N ),
14 2023-09-07
编程技术问答社区
thrust::sort的速度如何,最快的radix排序实现是什么?
我是GPU编程的新手.最近,我正在尝试基于教程: 0.02 ms,每个对象一个线程:计算边界框并分配Morton代码. 0.18 ms,并行radix排序:根据其Morton代码对对象进行排序. ... 在我的实施中,第一步的成本为0.1m,排序步骤的成本为1.8ms.我正在用推力进行分类.那么,在GPU上,Radix排序最快的实现是什么? 我正在使用Geforce Titan GPU,该GPU的速度应该比本教程作者使用的GeForce GTX690快. 这是我用于排序的测试代码,即使大小为10. ,它的成本约为1.5ms. void testSort() { int sz = 10; thrust::host_vector h_keys(sz); for(int i=0; i
22 2023-09-07
编程技术问答社区
cuda/thrust。试图在6GB的GPU RAM中对2.8GB的数据进行sort_by_key,结果发现bad_alloc。
我刚刚开始使用推力,到目前为止,我遇到的最大问题之一是,似乎没有关于需要多少内存操作的文档.因此,我不确定为什么下面的代码在尝试排序时会抛出bad_alloc(在排序之前,我仍然有50%的GPU内存可用,并且我在CPU上有70GB的RAM) - 任何人都可以阐明这个? #include #include #include void initialize_data(thrust::device_vector& data) { thrust::fill(data.begin(), data.end(), 10); } int main(void) { size_t N = 120 * 1024 * 1024; char line[256]; try { std::cout
8 2023-09-07
编程技术问答社区
用Thrust CUDA对对象进行排序
是否可以使用推力库对对象进行分类? 我有以下结构: struct OB{ int N; Cls *C; //CLS is another struct. } 是否可以根据n进行推力来对OB数组进行分类?您可以提供一个简单的示例,说明使用推力对对象进行排序?如果推力不能这样做,还有其他CUDA库可以让我这样做吗? 解决方案 thrust "> thrust ">接受比较操作员.请参阅他们的示例示例如何定义和使用这些.我尚未测试过,但是根据示例,您所需要的只是一个看起来像这样的结构: struct OBCmp { __host__ __device__ bool operator()(const OB& o1, const OB& o2) { return o1.N
10 2023-09-07
编程技术问答社区
CUDA:如何在GPU上直接使用thrust::sort_by_key?
推力库可用于对数据进行排序.呼叫可能看起来像这样(带有键和值向量): thrust::sort_by_key(d_keys.begin(), d_keys.end(), d_values.begin()); 在CPU上调用,d_keys和d_values在CPU内存中;大部分执行发生在GPU上. 但是,我的数据已经在GPU上了吗?如何使用推力库直接在GPU上执行有效排序,即从内核调用sort_by_key函数? 另外,我的数据包括一个密钥 unsigned long long int或unsigned int以及始终unsigned int的数据.我应该如何要求这些类型的推力? 解决方案 如链接的问题talonmies所述,您无法从CUDA函数(例如__device__或__global__)中调用推力.但是,这并不意味着您不能使用推力在设备内存中使用的数据.相反,您使用包裹原始数据的推力向量从主机调用所需的推力功能.例如 //raw pointer
98 2023-09-07
编程技术问答社区
如何提高用推力进行排序的计算时间?
我在下面的链接上找到了方法"矢量化/批处理排序"和"嵌套排序". 如何使用推力来对矩阵? 当我尝试使用500行和1000个元素的方法时,它们的结果为 矢量化/批次排序:66ms 嵌套排序:3290ms 我使用的是1080TI HOF模型来执行此操作,但是与您的情况相比,它需要太长. 但是在下面的链接中,它可能小于10ms,几乎100微秒. (>要使用CUDA? 您是否可以建议如何优化此方法以减少操作时间? #include #include #include #include #include #include #include #include
10 2023-09-07
编程技术问答社区