在上一篇博文中,我们谈到了如何利用共享内存来实现线程协作的问题。本篇博文我们主要来谈谈如何利用常量内存和纹理内存来提高程序性能。
Jeremy Lin
常量内存
所谓的常量内存,从它的名字我们就可以知道,它是用来保存在核函数执行期间不会发生变化的数据。NVIDIA硬件提供了64KB的常量内存,并且常量内存采用了不同于标准全局内存的处理方式。在某些情况下,用常量内存来替换全局内存可以有效地减少内存带宽。
常量内存的声明方式与共享内存是类似的。要使用常量内存,则需要在变量前面加上 __constant__修饰符...
分类:
其他好文 时间:
2014-11-29 23:08:00
阅读次数:
541
在上篇博文中,我们已经用CUDA C编写了一个程序,知道了如何编写在GPU上并行执行的代码。但是对于并行编程来说,最重要的一个方面就是,并行执行的各个部分如何通过相互协作来解决问题。只有在极少数情况下,各个处理器才不需要了解其他处理器的执行状态而彼此独立地计算出结果。即使对于一些成熟的算法,也仍然需要在代码的各个并行副本之间进行通信和协作。因此,下面我们来讲讲不同线程之间的通信机制和并行执行线程的同步机制。
首先,我们来看一个线程块的网格示意图:...
分类:
编程语言 时间:
2014-11-25 18:37:56
阅读次数:
271
编写多线程程序需要进行线程协作,前面介绍的利用互斥来防止线程竞速是来解决线程协作的衍生危害的。编写线程协作程序的关键是解决线程之间的协调问题,在这些任务中,某些可以并行执行,但是某些步骤需要所有的任务都结束之后才能开动。
wait()与notifyAll()
wait()使你可以等待某个条件发生变化,wait()会在等待外部世界产生变化的时候将任务挂起,并且只有在notify...
分类:
编程语言 时间:
2014-11-03 22:40:55
阅读次数:
239
在 Java 2 之前的版本,运行时的安全模型使用非常严格受限的沙箱模型(Sandbox)。读者应该熟悉,Java 不受信的 Applet 代码就是基于这个严格受限的沙箱模型来提供运行时的安全检查。沙箱模型的本质是,任何本地运行的代码都是受信的,有完全的权限来存取关键的系统资源。而对于 Applet...
分类:
编程语言 时间:
2014-10-24 18:25:17
阅读次数:
383
本文讲述3个线程通信实例:1、银行存款与提款多线程实现,使用Lock锁和条件Condition。 附加 : 用监视器进行线程间通信2、生产者消费者实现,使用LinkedList自写缓冲区。
3、多线程之阻塞队列学习,用阻塞队列快速实现生产者消费者模型。 附加:用布尔变量关闭线程
分类:
编程语言 时间:
2014-09-09 10:42:28
阅读次数:
362
这个虚类是kafka.network.Acceptor和kafka.network.Processor的父类,提供了一个抽象的Sever线程。它的有趣之处在于为子类的启动和停止提供了线程间的协作机制。当子类的shutdown方法被调用时,子类可以得知自己被停止,在子类做了适当的处理和清理后,调用自己...
分类:
编程语言 时间:
2014-05-25 19:19:18
阅读次数:
328
在并发编程时,一般使用runnable,然后扔给线程池完事,这种情况下不需要线程的结果。所以run的返回值是void类型。如果是一个多线程协作程序,比如菲波拉切数列,1,1,2,3,5,8...使用多线程来计算。但后者需要前者的结果,就需要用callable接口了。callable用法和runnab...
分类:
其他好文 时间:
2014-05-12 20:54:47
阅读次数:
491