ReLaXed

宋宝华:那些年你误会的Linux DMA(关于Linux DMA ZONE和API最透彻的一篇)

ε祈祈猫儿з 提交于 2020-11-28 08:41:46
原创 宋宝华 Linux阅码场 2019-11-29 创作目的 互联网、Linux内核书籍上充满了各种关于Linux DMA ZONE和dma_alloc_coherent、dma_map_single等的各种讲解,由于很多童鞋缺乏自身独立的思考,人云亦云,对这些概念形成了很多错误的理解。本文的目的在于彻底澄清这些误解。 当你发现本文内容与baidu到的内容不一致的时候,以本文内容为准。 本文目录 1.DMA ZONE的大小是16MB? 这个答案在32位X86计算机的条件下是成立的,但是在其他的绝大多数情况下都不成立。 首先我们要理解DMA ZONE产生的历史原因是什么。DMA可以直接在内存和外设之间进行数据搬移,对于内存的存取来讲,它和CPU一样,是一个访问master,可以直接访问内存。 DMA ZONE产生的本质原因是:不一定所有的DMA都可以访问到所有的内存,这本质上是硬件的设计限制。 在32位X86计算机的条件下,ISA实际只可以访问16MB以下的内存。那么ISA上面假设有个网卡,要DMA,超过16MB以上的内存,它根本就访问不到。所以Linux内核干脆简单一点,把16MB砍一刀,这一刀以下的内存单独管理。如果ISA的驱动要申请DMA buffer,你带一个GFP_DMA标记来表明你想从这个区域申请,我保证申请的内存你是可以访问的。 DMA ZONE的大小,以及DMA

宋宝华:那些年你误会的Linux DMA(关于Linux DMA ZONE和API最透彻的一篇)

久未见 提交于 2020-11-28 08:39:14
原创 宋宝华 Linux阅码场 2019-11-29 创作目的 互联网、Linux内核书籍上充满了各种关于Linux DMA ZONE和dma_alloc_coherent、dma_map_single等的各种讲解,由于很多童鞋缺乏自身独立的思考,人云亦云,对这些概念形成了很多错误的理解。本文的目的在于彻底澄清这些误解。 当你发现本文内容与baidu到的内容不一致的时候,以本文内容为准。 本文目录 1.DMA ZONE的大小是16MB? 这个答案在32位X86计算机的条件下是成立的,但是在其他的绝大多数情况下都不成立。 首先我们要理解DMA ZONE产生的历史原因是什么。DMA可以直接在内存和外设之间进行数据搬移,对于内存的存取来讲,它和CPU一样,是一个访问master,可以直接访问内存。 DMA ZONE产生的本质原因是:不一定所有的DMA都可以访问到所有的内存,这本质上是硬件的设计限制。 在32位X86计算机的条件下,ISA实际只可以访问16MB以下的内存。那么ISA上面假设有个网卡,要DMA,超过16MB以上的内存,它根本就访问不到。所以Linux内核干脆简单一点,把16MB砍一刀,这一刀以下的内存单独管理。如果ISA的驱动要申请DMA buffer,你带一个GFP_DMA标记来表明你想从这个区域申请,我保证申请的内存你是可以访问的。 DMA ZONE的大小,以及DMA

手残党福音:一键抠图、隔空移物,这篇CVPR华人论文帮你搞定

廉价感情. 提交于 2020-09-30 05:23:59
  机器之心报道    编辑:蛋酱、杜伟、小舟    世界上从来不缺少抠图工具,但始终缺少更完美的抠图工具(尤其是对于手残党来说)。      在传统年代,人们能想到最精准的抠图方法,大概是 Photoshop 之类的专业图像处理软件,显然这种处理方式会很繁琐。随着人工智能技术的发展,从业者开始尝试将最先进的机器学习技术融入到图像处理工作之中。这些开源算法最终变成了各种各样的在线抠图程序,最重要的是——它们的操作方法非常简单且完全免费。   比如「Remove.bg」,你只需要上传图片,网站就能识别其中的主体并去除背景,最终返回一张透明背景的 PNG 格式图片。尽管在前景与背景之间边界处理上存在瑕疵,但借助 AI 来抠图确实比自己动手要便捷,不是吗?      网站地址:https://www.remove.bg/   近日,一款名为「ObjectCut」的图像处理新工具进入了大家的视野。你甚至不需事先将图片下载到本地,只需要输入图片网址,即可得到一张去除背景后的图片。      https://objectcut.com/      使用教程演示。   项目作者表示,这一工具所使用方法基于 CVPR 2019 论文《BASNet: Boundary-Aware Salient Object Detection》,并使用了一些相关的公开数据集来进行训练,包括 ECSSD、SOD

谷歌技术探究之GFS

回眸只為那壹抹淺笑 提交于 2020-05-07 11:44:24
文章目录 引言 GFS的主要设计预期 GFS架构 chunk相关 一致性模型 系统的交互过程 租约(lease) 快照 副本选择 容错机制 master chunk FAQ 总结 引言 GFS可以说是当今云计算的鼻祖,直至今日借鉴其思想的HDFS仍旧活跃在我们的视线当中,我们实在是有必要去好好的学习下相关的知识的,这篇文章是在学习了《The Google File System》这篇论文以后的一点理解和总结,以及对于6.824相关课程资料的结合。因为掺杂了个人的理解有些地方可能并不准确,还望有不同见解的朋友能不吝赐教。 GFS的主要设计预期 系统由廉价的普通机器组成, 所以失效是一种常态 。 系统存储一定数量的大文件 ,预期会有几百万文件,文件的大小通常在100MB或者以上。 工作负载主要由两种读操作构成, 大规模的流式读取和小规模的随机读取 。 工作负载还有写操作,一般是 大规模的、顺序的、数据追加方式的写操作,所以系统支持原子的数据追加操作 。 在高吞吐量和低延时之间GFS选择前者 。 GFS架构 我们可以看到处理 GFS client 以外还有 GFS master 和 GFS chunkserver 。 一般而言整个集群中存在一个master,当然这个一个指的不是一台机器,而是一个集群,其中的机器负责主master的容错,和负载均衡。还存在着许多的 GFS

GIC , SPI , PPI (窝窝科技的文章题目改了下)【转】

╄→гoц情女王★ 提交于 2020-04-24 03:45:36
转自: https://www.cnblogs.com/tureno/articles/6403408.html 转载于: http://www.wowotech.net/irq_subsystem/gic-irq-chip-driver.html GIC驱动代码分析(废弃) 这份文档状态是:废弃,新的文档请访问 http://www.wowotech.net/linux_kenrel/gic_driver.html 一、前言 GIC(Generic Interrupt Controller)是ARM公司提供的一个通用的中断控制器。GIC通过AMBA(Advanced Microcontroller Bus Architecture)这样的片上总线连接到一个或者多个ARM processor上。本文主要分析了linux kernel中GIC中断控制器的驱动代码。 具体的分析方法是按照source code为索引,逐段分析。对于每一段分析的代码,力求做到每个细节都清清楚楚。这不可避免要引入很多对GIC的硬件描述,此外,具体GIC中断控制器的驱动代码和linux kernel中断子系统的交互也会描述,但本文不会描述linux kernel的generic interrupt subsystem。 本文以OMAP4460这款SOC为例,OMAP4460内部集成了GIC的功能

原子操作<atomic> memory_order

有些话、适合烂在心里 提交于 2019-12-26 19:17:41
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> https://zh.cppreference.com/w/cpp/atomic/memory_order std::atmoic和std::memory_order只有在 多cpu多线程 情况下, 无锁编程 才会用到 编译器优化而产生的指令乱序,cpu指令流水线也会产生指令乱序。当然这些乱序指令都是为了同一个目的,优化执行效率。 happens-before:按照程序的代码序执行,对同一线程,就是一个操作要在另一个操作之前执行。对多个线程,某一个线程的操作A要在另一线程的操作B之前发生。若顺序变了,可能就不能达到我们希望的效果。 synchronized-with:不同线程间,对于同一个原子操作,需要同步关系,store()操作一定要先于 load(),也就是说 对于一个原子变量x,先写x,然后读x是一个同步的操作,读x并不会读取之前的值,而是当前写x的值。 int a=0,int b=1; void func(){ a=b+22; b=22; } func代码没有被编译器优化,按照正常指令执行: movl b(%rip), %eax ; 将 b 读入 %eax(通用寄存器) addl $22, %eax ; %eax 加 22, 即 b + 22 movl %eax, a(%rip) ; % 将 %eax

ubuntu18 编译 opencv3.4.5(cuda版本)

偶尔善良 提交于 2019-12-23 01:16:30
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> cmake命令参数为: cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_CXX_FLAGS="-std=c++11" \ -D CUDA_NVCC_FLAGS=--expt-relaxed-constexpr \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D WITH_CUDA=ON \ -D ENABLE_FAST_MATH=1 \ -D CUDA_FAST_MATH=1 \ -D WITH_CUBLAS=1 \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D BUILD_opencv_python2=OFF \ -D BUILD_opencv_python3=ON \ -D PYTHON_EXECUTABLE=~/.virtualenvs/cv/bin/python \ -D PYTHON_PACKAGES_PATH=/home/allen/.virtualenvs/cv/lib/python3.6/site-packages \ -D PYTHON_LIBRARY=$(python3.6 -c "from distutils.sysconfig import get_config_var;from os