【问题标题】:Have GTX Titan, having trouble with Dynamic Parallelism有 GTX Titan,动态并行有问题
【发布时间】:2013-10-22 10:25:41
【问题描述】:

我正在尝试从另一个内核调用 CUDA 内核,但得到以下错误:

Traceback (most recent call last):
  File "C:\temp\GPU Program Shell.py", line 22, in <module>
    """)
  File "C:\Python33\lib\site-packages\pycuda\compiler.py", line 262, in __init__
    arch, code, cache_dir, include_dirs)
  File "C:\Python33\lib\site-packages\pycuda\compiler.py", line 252, in compile
    return compile_plain(source, options, keep, nvcc, cache_dir)
  File "C:\Python33\lib\site-packages\pycuda\compiler.py", line 134, in compile_plain
    cmdline, stdout=stdout.decode("utf-8"), stderr=stderr.decode("utf-8"))
pycuda.driver.CompileError: nvcc compilation of         c:\users\karste~1\appdata\local\temp\tmpgq8t45\kernel.cu failed
[command: nvcc --cubin -arch sm_35 -m64 -Ic:\python33\lib\site-packages\pycuda\cuda kernel.cu]
[stderr:
kernel.cu(14): error: kernel launch from __device__ or __global__ functions requires separate         compilation mode

我的理解是,这与动态并行性有关,与此错误相关的另一个问题是由于用户没有合适的硬件。但是,我有一个 GTX Titan,所以它应该是兼容的。我错过了什么?

编辑

添加后"options=['--cubin','-rdc=true','-lcudart','-lcudadevrt,','-Ic:\python33\lib\site-packages\pycuda\cuda kernel .cu']" 到 SourceModule,我收到以下错误:

Traceback (most recent call last):
  File "C:\temp\GPU Program Shell.py", line 22, in <module>
""", options=['--cubin','-rdc=true' ,'-lcudart', '-lcudadevrt,','-Ic:\python33\lib\site-packages\pycuda\cuda kernel.cu'])
  File "C:\Python33\lib\site-packages\pycuda\compiler.py", line 265, in __init__
self.module = module_from_buffer(cubin)
pycuda._driver.LogicError: cuModuleLoadDataEx failed: not found - 

【问题讨论】:

    标签: cuda nvcc pycuda


    【解决方案1】:

    Python 正在动态编译 CUDA 代码:

    nvcc --cubin -arch sm_35 -m64 -Ic:\python33\lib\site-packages\pycuda\cuda kernel.cu
    

    为了编译包含动态并行性的代码,需要在编译命令中添加特定开关,以启用单独编译、设备代码链接、设备运行时库的链接以及适当的架构目标 (sm_35)。

    programming guide section on dynamic parallelism 中给出了一些有效的nvcc 命令组合示例。

    您的命令行应该类似于:

    nvcc --cubin -arch=sm_35 -m64 -rdc=true -Ic:\python33\lib\site-packages\pycuda\cuda kernel.cu -lcudadevrt
    

    您可能还希望阅读separate compilation 上的 nvcc 手册。

    【讨论】:

    • 感谢您的指点,罗伯特。我回家后会检查一下。
    • 我通过将 -rdc、-IC 和 -lcudadevrt 开关添加到源模块的选项列表中进行了更改。我将错误编辑到原始问题中!生活是悲伤的。
    • 现在问题不同了。 PyCUDA 没有找到立方体。这可能有多种原因,例如代码架构不匹配、编译器缓存问题、某种编译错误或其他问题。您是在 32 位还是 64 位环境中工作?你能运行其他pycuda代码吗?我不是 pycuda 专家,所以如果您发布一个涵盖此问题的新问题,您可能会获得更好的牵引力。
    • 嗯,好的。我在 64 位环境中工作,并且能够运行其他 pycuda 代码。我会采纳您的建议并发布另一个问题,但似乎无论我做什么,动态并行性都会遇到障碍。在谷歌搜索这个新问题几个小时后,我昨晚在 C++ 中尝试了一个类似的实验,并遇到了 LINK2019 错误。上帝恨我。
    • 对于任何寻找编辑前指出的单独编译问题的答案的人,罗伯特都做到了。
    猜你喜欢
    • 2014-11-25
    • 2018-01-06
    • 2013-08-30
    • 1970-01-01
    • 2017-08-09
    • 2015-08-20
    • 1970-01-01
    • 2016-10-08
    • 1970-01-01
    相关资源
    最近更新 更多