有什么方法可以在由主机控制的设备代码中设置屏障?

太阳之子

例如,我的代码是这样的(但是它不起作用并且内核停止运行):

__device__ __managed__ int x;

__global__ void kernel() {

    // do something 

    while(x == 1); // a barrier 

    // do the rest 
}

int main() {
    x = 1;
    kernel<<< 1, 1 >>>();
    x = 0;

    //...
}

无论如何,我可以做到这一点吗?

罗伯特·克罗维拉

您无法使用托管内存的当前实现来执行此操作,因为在内核运行时,托管内存要求设备以独占方式访问托管数据。在内核运行期间,主机对托管数据的访问将导致不确定的行为,通常是段错误。

但是,使用零拷贝技术(包括volatile@Cicada建议)应该可以做到这一点。

这是一个可行的示例:

$ cat t736.cu
#include <stdio.h>
#include <unistd.h>

__global__ void mykernel(volatile int *idata, volatile int *odata){

  *odata = *idata;
  while (*idata == 1);
  *odata = *idata+5;
}

int main(){

  int *idata, *odata;

  cudaHostAlloc(&idata, sizeof(int), cudaHostAllocMapped);
  cudaHostAlloc(&odata, sizeof(int), cudaHostAllocMapped);

  *odata = 0;
  *idata = 1;  // set barrier
  mykernel<<<1,1>>>(idata, odata);
  sleep(1);
  printf("odata = %d\n", *odata); // expect this to be 1
  *idata = 0; // release barrier
  sleep(1);
  printf("odata = %d\n", *odata); // expect this to be 5
  cudaDeviceSynchronize(); // if kernel is hung, we will hang
  return 0;
}


$ nvcc -o t736 t736.cu
$ cuda-memcheck ./t736
========= CUDA-MEMCHECK
odata = 1
odata = 5
========= ERROR SUMMARY: 0 errors
$

上面假设Linux 64位环境。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有什么方法可以确定变量是在设备上还是在主机上?

来自分类Dev

有什么方法可以使分区工具看到由kpartx创建的设备?

来自分类Dev

有什么方法可以在UEFI中模拟I / O设备?

来自分类Dev

有什么方法可以控制smpp中的Flash消息主题?

来自分类Dev

有什么方法可以设置针对特定设备宽度和高度的媒体查询?

来自分类Dev

有什么方法可以在Mozilla中设置MouseEvent的button属性?

来自分类Dev

有什么方法可以控制考试ID?

来自分类Dev

有什么方法可以从命令行控制evince设置吗?

来自分类Dev

Js/jQuery - 此代码将大小设置为变量,有什么方法可以使其响应?

来自分类Dev

在C中实现线程屏障和屏障重置的正确方法是什么?

来自分类Dev

有什么方法可以在doc注释(由cargo doc呈现)中内联const?

来自分类Dev

有什么方法可以将手机中的SIM卡放入热点设备?

来自分类Dev

“设置˘蓝牙和其他设备”中列出的“USB控制”设备是什么?

来自分类Dev

有什么方法可以检测 DialogFlow 请求来自哪个设备?

来自分类Dev

有什么有效的方法可以在python中编写此代码

来自分类Dev

在Node.js中,有什么方法可以在控制台上打印\ n \ r?

来自分类Dev

在Phoenix中,有什么方法可以只生成控制器,而无需模型吗?

来自分类Dev

在NestJS中,有什么方法可以将数据从Guards传递到控制器?

来自分类Dev

有什么方法可以在Shiny中的反应式功能中设置优先级?

来自分类Dev

有什么方法可以在Emma中跨多个项目运行代码覆盖?

来自分类常见问题

有什么方法可以在代码中为RecyclerView启用滚动条吗?

来自分类Dev

有什么方法可以自动缩进文本文件中的VB.NET代码

来自分类Dev

有什么方法可以从aspx文件访问后面代码中定义的“ var”类型的变量?

来自分类Dev

有什么简单的方法可以在R中编写代码来获得泳客图?

来自分类Dev

有什么方法可以从aspx文件访问后面代码中定义的“ var”类型的变量?

来自分类Dev

有什么方法可以避免Clojure中的这种重复代码?

来自分类Dev

有什么方法可以缩短我的代码中的循环以加快宏的速度吗?

来自分类Dev

有什么方法可以自动在DLL中运行某些代码吗?

来自分类Dev

有什么方法可以控制Javascript异步加载顺序?

Related 相关文章

  1. 1

    有什么方法可以确定变量是在设备上还是在主机上?

  2. 2

    有什么方法可以使分区工具看到由kpartx创建的设备?

  3. 3

    有什么方法可以在UEFI中模拟I / O设备?

  4. 4

    有什么方法可以控制smpp中的Flash消息主题?

  5. 5

    有什么方法可以设置针对特定设备宽度和高度的媒体查询?

  6. 6

    有什么方法可以在Mozilla中设置MouseEvent的button属性?

  7. 7

    有什么方法可以控制考试ID?

  8. 8

    有什么方法可以从命令行控制evince设置吗?

  9. 9

    Js/jQuery - 此代码将大小设置为变量,有什么方法可以使其响应?

  10. 10

    在C中实现线程屏障和屏障重置的正确方法是什么?

  11. 11

    有什么方法可以在doc注释(由cargo doc呈现)中内联const?

  12. 12

    有什么方法可以将手机中的SIM卡放入热点设备?

  13. 13

    “设置˘蓝牙和其他设备”中列出的“USB控制”设备是什么?

  14. 14

    有什么方法可以检测 DialogFlow 请求来自哪个设备?

  15. 15

    有什么有效的方法可以在python中编写此代码

  16. 16

    在Node.js中,有什么方法可以在控制台上打印\ n \ r?

  17. 17

    在Phoenix中,有什么方法可以只生成控制器,而无需模型吗?

  18. 18

    在NestJS中,有什么方法可以将数据从Guards传递到控制器?

  19. 19

    有什么方法可以在Shiny中的反应式功能中设置优先级?

  20. 20

    有什么方法可以在Emma中跨多个项目运行代码覆盖?

  21. 21

    有什么方法可以在代码中为RecyclerView启用滚动条吗?

  22. 22

    有什么方法可以自动缩进文本文件中的VB.NET代码

  23. 23

    有什么方法可以从aspx文件访问后面代码中定义的“ var”类型的变量?

  24. 24

    有什么简单的方法可以在R中编写代码来获得泳客图?

  25. 25

    有什么方法可以从aspx文件访问后面代码中定义的“ var”类型的变量?

  26. 26

    有什么方法可以避免Clojure中的这种重复代码?

  27. 27

    有什么方法可以缩短我的代码中的循环以加快宏的速度吗?

  28. 28

    有什么方法可以自动在DLL中运行某些代码吗?

  29. 29

    有什么方法可以控制Javascript异步加载顺序?

热门标签

归档