Memory 内核中的CUDA动态内存分配

Memory 内核中的CUDA动态内存分配,memory,cuda,Memory,Cuda,有两个名为A和B的数组,它们彼此对应,并且在内核运行期间分配它们的空间。A和B的细节是A[i]是位置,B[i]是值。所有线程都执行以下操作: 如果当前线程的数据在数组更新B中 否则展开A和B,并将当前线程的数据插入数组 A和B的初始大小为零 CUDA是否支持上层实现 关于第2点,您需要像C++的realloc()这样的东西,据我所知,CUDA不支持它。您可以根据本文编写自己的realloc() 但我不知道这个解决方案的效率有多高 或者,您应该预先分配“大量”全局内存,以便能够考虑最坏的内存占用

有两个名为A和B的数组,它们彼此对应,并且在内核运行期间分配它们的空间。A和B的细节是A[i]是位置,B[i]是值。所有线程都执行以下操作:

  • 如果当前线程的数据在数组更新B中
  • 否则展开A和B,并将当前线程的数据插入数组
  • A和B的初始大小为零
  • CUDA是否支持上层实现

    关于第2点,您需要像C++的
    realloc()
    这样的东西,据我所知,CUDA不支持它。您可以根据本文编写自己的
    realloc()

    但我不知道这个解决方案的效率有多高


    或者,您应该预先分配“大量”全局内存,以便能够考虑最坏的内存占用情况。

    请澄清第1点?第1点意味着a[i]和B[i]存储第i个元素的位置和值,当前线程可能会更新B[i],如果当前线程元素的位置在数组A中,非常感谢!另一个问题是如何保证原子操作?如果有多个线程同时更新A和B。请参阅CUDA C编程指南,第B.11节。在这里,您可以找到有关如何在CUDA中使用原子操作的信息。第B.11节中的原子操作用于精确数量的全局内存或共享内存,例如B[i];我想保证整个数组的原子操作,比如当一个线程访问数组时,另一个线程被拒绝访问数组。您可以考虑使用一个关键部分来控制对数组的访问,但也存在挑战和困难。在右上角的cuda关键部分搜索是的,我提到了挑战和困难。您可以考虑使用一个关键部分来管理块间访问,同时使用普通线程块通信方法(共享内存、等来处理线程块中的仲裁。