pycuda学习笔记(二)

2023-11-02

1.pycuda._driver.LogicError: cuDeviceGet failed: initialization error报错怎么办?
Traceback (most recent call last):
File “/usr/lib/python3.6/multiprocessing/process.py”, line 258, in _bootstrap
self.run()
File “/usr/lib/python3.6/multiprocessing/process.py”, line 93, in run
self._target(*self._args, **self._kwargs)
File “a.py”, line 15, in dott
ctx = cuda.Device(0).make_context()
pycuda._driver.LogicError: cuDeviceGet failed: initialization error

答:cuDeviceGet失败:初始化错误。显卡初始化失败。
把显卡初始化的代码写到函数内部即可。或者用这句代码试试

mp.set_start_method('spawn')

这行代码执行完,意味着原来的进程和子进程已经隔离开.

2.上面提到隔离开,那父进程和子进程怎么通信?
答:三种方法,1.消息队列。2.pipe管道。3.数据共享

#进程queue传递
from multiprocessing import Process,Queue

def f(qq):
    qq.put([42, None, 'hello'])

if __name__ == '__main__':
    q = Queue() #父进程queue
    p = Process(target=f,args=(q,)) #子进程 父进程的queue传给子进程 


#实现数据传递
    p.start() #启动子进程
    print(q.get())  # prints "[42, None, 'hello']" 父进程q可以get到子进程p 实现父进程子进程数据共享
    p.join()

#线程queue不能传给进程

 
#管道传递
 from multiprocessing import Process, Pipe

 def f(conn):
     conn.send([42, None, 'hello from child'])
     conn.send([43,None,'hello from child2'])
     print("child recv:",conn.recv())
     conn.close()

 if __name__ == '__main__':
     parent_conn, child_conn = Pipe() #生成管道实例,取出两端
     p = Process(target=f, args=(child_conn,))
     p.start()
     print(parent_conn.recv())# prints "[42, None, 'hello']"
     print(parent_conn.recv())
     parent_conn.send("hello send by parent")
     p.join()




manager数据共享
 from multiprocessing import Process, Manager
 import os

 def f(d, l):#每个子进程执行的函数
     d[os.getpid()]=os.getpid()
     l.append(os.getpid())
     print(l)


 if __name__ == '__main__':
     with Manager() as manager:#
         d = manager.dict() #父进程生成一个字典 多个进程之间可共享的字典

         l = manager.list(range(5)) #父进程生成一个列表 多个进程之间可以共享的列表 默认有5个数据
         p_list = [] #用于多个进程join
         for i in range(10):
             p = Process(target=f, args=(d, l))
             p.start() #开启10个子进程
             p_list.append(p)
         for res in p_list: # 等待每个子进程结果
             res.join()

         print(d)
         print(l)

代码如下

# import pycuda.autoinit
import pycuda.driver as cuda
import numpy
import multiprocessing as mp

from pycuda.compiler import SourceModule
# export PATH=/usr/local/cuda/bin:$PATH


  


def dott(array_a, array_b):
    cuda.init()  
    ctx  = cuda.Device(0).make_context()
    mod = SourceModule("""
    __global__ void dot(float *dest, float *a, float *b)
    {
    const int i = threadIdx.x;
    dest[i] = a[i] * b[i];
    }
    """)
    dot = mod.get_function("dot")

    dest = numpy.zeros_like(array_a)
    dot(cuda.Out(dest), cuda.In(array_a), cuda.In(array_b),block=(len(array_a),1,1), grid=(1,1))
    print(dest)
    print("运行成功!")
    ctx.pop()
    return dest



if __name__ == "__main__":
    a = numpy.random.normal(size=40).astype(numpy.float32)
    b = numpy.random.normal(size=40).astype(numpy.float32)

    mp.set_start_method('spawn')
    ps = []
    for i in range(2):
        p = mp.Process(target=dott, args=((a,b)))
        ps.append(p)
        p.start()

    for p in ps:
        p.join()
    





本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pycuda学习笔记(二) 的相关文章

  • 在新线程中调用支持 CUDA 的库

    我编写了一些代码并将其放入它自己的库中 该库使用 CUDA 在 GPU 上进行一些处理 我正在使用 Qt 构建 GUI 前端 作为加载 GUI 的一部分 我调用 CUresult res CUdevice dev CUcontext ctx
  • 用于类型比较的 Boost 静态断言

    以下问题给我编译器错误 我不知道如何正确编写它 struct FalseType enum value false struct TrueType enum value true template
  • libstdc++.so.6 与 cuda 相关的链接器问题

    今天我在链接我编译的 cuda 内容时遇到了问题 我有一个最新的 debian 测试 w 2 6 32 3 amd64 我整天都在写我的代码 不时编译 没有问题 但在进行了较小的代码更改后 我收到以下错误 gcc o pa CUDA o h
  • 寻找 CUDA 中的最大值

    我正在尝试在 CUDA 中编写代码来查找最大值 对于给定的一组数字 假设您有 20 个数字 并且内核在 2 个块 每块 5 个线程 上运行 现在假设 10 个线程同时比较前 10 个值 并且thread 2找到最大值 因此线程 2 正在更新
  • “计算能力”是什么意思? CUDA?

    我是CUDA编程新手 对此了解不多 您能告诉我 CUDA 计算能力 是什么意思吗 当我在大学服务器上使用以下代码时 它向我显示了以下结果 for device 0 device lt deviceCount device cudaDevic
  • 传递给 CUDA 的结构中的指针

    我已经搞砸了一段时间了 但似乎无法正确处理 我正在尝试将包含数组的对象复制到 CUDA 设备内存中 然后再复制回来 但当我遇到它时我会跨过那座桥 struct MyData float data int dataLen void copyT
  • 如何在 Visual Studio 2010 中设置 CUDA 编译器标志?

    经过坚持不懈的得到error identifier atomicAdd is undefined 我找到了编译的解决方案 arch sm 20旗帜 但是如何在 VS 2010 中传递这个编译器标志呢 我已经尝试过如下Project gt P
  • 如何并行从数组中删除零值

    如何使用 CUDA 并行有效地从数组中删除零值 有关零值数量的信息是预先可用的 这应该可以简化这项任务 重要的是数字必须保持源数组中的顺序 当被复制到结果数组时 Example 该数组将例如包含以下值 0 0 19 7 0 3 5 0 0
  • 无法在 CUDA 中执行设备内核

    我正在尝试在全局内核中调用设备内核 我的全局内核是矩阵乘法 我的设备内核正在查找乘积矩阵每列中的最大值和索引 以下是代码 device void MaxFunction float Pd float max int x threadIdx
  • CUDA 常量内存是否应该被均匀地访问?

    我的 CUDA 应用程序的恒定内存小于 8KB 既然它都会被缓存 我是否需要担心每个线程访问相同的地址以进行优化 如果是 如何确保所有线程同时访问同一地址 既然它都会被缓存 我是否需要担心每个线程访问相同的地址以进行优化 是的 这缓存本身每
  • 尝试构建我的 CUDA 程序时出现错误 MSB4062

    当我尝试构建我的第一个 GPU 程序时 出现以下错误 有什么建议可能会出什么问题吗 错误 1 错误 MSB4062 Nvda Build CudaTasks SanitizePaths 任务 无法从程序集 C Program 加载 文件 M
  • CUDA 矩阵加法时序,按行与按行比较按栏目

    我目前正在学习 CUDA 并正在做一些练习 其中之一是实现以 3 种不同方式添加矩阵的内核 每个元素 1 个线程 每行 1 个线程和每列 1 个线程 矩阵是方阵 并被实现为一维向量 我只需用以下命令对其进行索引 A N row col 直觉
  • __device__ __constant__ 常量

    有什么区别吗 在 CUDA 程序中定义设备常量的最佳方法是什么 在 C 主机 设备程序中 如果我想将常量定义在设备常量内存中 我可以这样做 device constant float a 5 constant float a 5 问题 1
  • 无法在内存位置找到异常源:cudaError_enum

    我正在尝试确定 Microsoft C 异常的来源 test fft exe 中 0x770ab9bc 处的第一次机会异常 Microsoft C 异常 内存位置 0x016cf234 处的 cudaError enum 我的构建环境是 I
  • “gld/st_throughput”和“dram_read/write_throughput”指标之间有什么区别?

    在 CUDA 可视化分析器版本 5 中 我知道 gld st requested throughput 是应用程序请求的内存吞吐量 然而 当我试图找到硬件的实际吞吐量时 我很困惑 因为有两对似乎合格的指标 它们是 gld st throug
  • CUDA 中指令重放的其他原因

    这是我从 nvprof CUDA 5 5 获得的输出 Invocations Metric Name Metric Description Min Max Avg Device Tesla K40c 0 Kernel MyKernel do
  • 如何运行和理解CUDA Visual Profiler?

    我已经设置了 CUDA 5 0 并且我的 CUDA 项目运行良好 但我不知道如何使用 Visual Profiler 分析我的 CUDA 项目 如何运行它 我还需要安装更多吗 又该如何做呢 我的电脑使用Window 7 64位 CUDA 5
  • 具有 Cuda Thrust 的多个 GPU?

    如何将 Thrust 与多个 GPU 一起使用 这只是使用 cudaSetDevice deviceId 的问题吗 然后运行相关的 Thrust 代码 使用 CUDA 4 0 或更高版本 cudaSetDevice deviceId 接下来
  • cudaDeviceScheduleBlockingSync 和 cudaDeviceScheduleYield 之间有什么区别?

    正如这里所说 如何减少 CUDA 同步延迟 延迟 https stackoverflow com questions 11953722 how to reduce cuda synchronize latency delay 等待设备结果有
  • 为什么 cuCtxCreate 返回旧上下文?

    我已经安装了 CUDA SDK 4 2 64 CUDA工具包4 2 64 CUDA 驱动程序 4 2 64 我检查了 windows 中的每个 nvcuda dll 所有这些都是 4 2 版本 但是当我使用驱动程序 api 创建上下文并使用

随机推荐

  • Java根据枚举名使用反射获取枚举值

    由于前端需要根据枚举名获取实时获取枚举值 所以通过反射去得到枚举数据 一 首先我们新建一个枚举类接口 用于之后反射使用 package com littlematch enums biz 枚举值接口定义类 public interface
  • Eclipse导入工程文件后出现红叉解决方案:

    Step1 右击工程文件名 然后点击buildPath step2 点击Library 再点击JRE System Librarystep3 双击JRE System Library 选最后一个 Workspace default JRE
  • C++ 多线程:原子操作atomic

    原子操作atomic C 多线程 原子类型 有两个线程 一个要写数据 一个读数据 如果不加锁 可能会造成读写值混乱 使用std mutex程序执行不会导致混乱 但是每一次循环都要加锁解锁是的程序开销很大 为了提高性能 C 11提供了原子类型
  • 四二拍用音符怎么表示_钢琴教学:学会这3个音符!立马解决你节奏的致命问题!...

    在学习节奏之前 我们先来了解节奏是什么 以及节奏的重要性 一切协调 平衡 有次序的进行都可以称为节奏 节奏可以独立存在 而在音乐中具体表现为 用强弱相互交替 将音的长短关系组织起来 称为节奏 许多节奏的组合在音乐进行中已经形成固定的模式 而
  • 1.3编程基础之算术表达式与顺序执行 06:甲流疫情死亡率

    1 3编程基础之算术表达式与顺序执行 06 甲流疫情死亡率 总时间限制 1000ms 内存限制 65536kB 描述 甲流并不可怕 在中国 它的死亡率并不是很高 请根据截止2009年12月22日各省报告的甲流确诊数和死亡数 计算甲流在各省的
  • java web开发一个帐号同一时间只能一个人登录

    一个帐号同一时间只能一个人登录 对于一个帐号在同一时间只能一个人登录 可以通过下面的方法实现 1 在用户登录时 把用户添加到一个ArrayList中 2 再次登录时查看ArrayList中有没有该用户 如果ArrayList中已经存在该用户
  • springboot实现各种参数校验

    springboot实现各种参数校验 简单使用 Java API规范 JSR303 定义了Bean校验的标准validation api 但没有提供实现 hibernate validation是对这个规范的实现 并增加了校验注解如 Ema
  • 【JavaWeb】JSP使用Session、Cookie实现购物车

    购物界面shop jsp 初始页面 添加商品后 在session中设置属性 重定向回到shop jsp 然后根据session的内容显示结果 Cookie设置setMaxAge可以延长session的寿命 清空购物车就是清除session
  • 基于以太坊的USDT(基于ERC-20协议发行)

    这种USDT存储在以太坊地址上 相对应的 每次转账 链上转账 时 需要消耗Gas 也就是ETH 目前 市场上的USDT绝大部分是基于比特币的USDT 基于以太坊的USDT份额很低 约3 基于TRON网络TRC20协议的USDT 存储在TRO
  • 当心互联网抢了你的饭碗

    两年前 供职于帕洛阿尔托研究中心 Palo Alto Research Center 的学者布莱恩 亚瑟 Brian Arthur 做出了一项惊人预测 未来二三十年 西方数字网络履行的功能最终将相当于美国 实体 经济的规模 亚瑟写道 或者
  • Qt 信号和槽学习

    使用一个按钮按下时 我们可能想要窗口的 close 函数被调用 这个操作可以通过设置回调函数实现 但回调函数不够直观 而且容易出现参数类型错误等问题 Qt中使用的代替方案是信号和槽机制 信号和槽 当特定的事件出现时 一个信号被发出 槽函数作
  • 探索Java8——Lambda方法引用

    管中窥豹 方法引用让你可以重复使用现有的方法定义 并像Lambda一样传递它们 在一些情况下 比起使用Lambda表达式 它们似乎更易读 感觉也更自然 inventory sort Apple a1 Apple a2 gt a1 getWe
  • 数字孪生万亿市场显现,缺的不止是硬件落地

    数字孪生是从真实世界到虚拟世界的1 1映射 它通过控制虚拟世界中的生产过程和生产设备 模拟现实世界中的工业生产 更加注重 从虚拟到真实 工业元宇宙所反映的虚拟世界不仅具有现实世界的映射 而且具有现实世界中尚未实现甚至无法实现的体验和互动 这
  • Python实现发送邮件

    SMTP模块发送普通邮件 import smtplib from email mime text import MIMEText from email header import Header 发送方邮箱 msg from 授权码 pass
  • 实习周记1:跨vlan通信

    跨vlan通信 1 拓扑图 2 要求 不同vlan的两台pc通过二层交换机实现二层互通 3 命令 H3C GigabitEthernet2 0 1 port link type hybrid 把端口模式改为hydrid H3C Gigabi
  • Sybase服务无法启动

    刚刚改完数据库的最大连接数 重启服务时 却发现服务无法启动 找了大半天的原因 终于找到了 可惜不会弄 只好有网上搜索一下 发现这种问题还比较常见 服务起不来 在应用程序事件查看器中发现有如下错误 300122 The value of th
  • 工程师的基本素质

    昨天开会 印象最为深刻的是领导的这么一句话 工程师的基本素质 专注 专心 责任 放心 真的 我没有真正意识到并做到这些 所以对于人的准则的教育是必须的 要让人认识到 职责所在 用心做事 愧对自己 洗心革面矣
  • 【调制BFSK】二进制频移键控FSK的数字调制(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 相移键控 PS K 是利用载波相位直接表示
  • python给图片添加水印图片_python 给图片添加数字水印示例

    实例简介 实例截图 核心代码 coding utf 8 Spyder Editor This is a temporary script file from PIL import Image import numpy as np count
  • pycuda学习笔记(二)

    1 pycuda driver LogicError cuDeviceGet failed initialization error报错怎么办 Traceback most recent call last File usr lib pyt