- 浏览: 81038 次
- 性别:
最新评论
文章列表
在我们编写CUDA程序时我们经常要对CPU和GPU上分配内存和管理,这样就增加了编写程序发复杂度。在cuda6后引入了统一寻址(Unified Memory)技术,该技术使得CPU和GPU使用同一个指针对同一块内存进行处理,省去了原始的在CPU和CPU分配内存然后来回拷贝的过程,简化了程序的编写。
统一寻址创建了一块托管内存(managed memory),这是在CPU和GPU共享的内存,它在CPU和GPU之间架起了桥梁。这块托管内存CPU和GPU都能访问通过单一指针访问得到,最关键的一点是,系统会自动地在host端和device端转移在Unified Memory内 ...
页锁定内存:
cudaHostAlloc()分配页锁定内存,页锁定内存也称为固定内存或不可分页内存,它有一个重要的属性:操作系统将不会对这块内存分页并交换到磁盘上,从而确保了该内存始终驻留在物理内存中。
流:
cuda流用于任务的并行。任务并行性是指并行执行两个或多个不同的任务,而不是在大量数据上执行同一个任务的数据并行性。比如处理同一副图,你用一个流处理左边半张图片,再用第二个流处理右边半张图片,这两个流中的代码同时执行,加快了处理速度。
示例:
#include <stdio.h>
#include <cuda_runtime.h>
...
1.安装docker
参考地址:http://www.oschina.net/news/54811/docker-1-0-1-is-provided-test-on-ubuntu-14-04-lts
2.创建docker用户及提交镜像
参考地址:http://blog.csdn.net/rually/article/details/51439212
3.docker学习
参考地址:http://www.open-open.com/lib/view/open1423703640748.html#articleHeader12
提交镜像:
fangbing@fa ...
1. 程序编译成功后,运行时错误:
error while loading shared libraries: libmpi.so.20: cannot open shared object file: No such file or directory
解决方法:
cp /usr/local/openmpi/lib/libmpi.so.20 /usr/lib
2.在使用fftw库时,添加cuda程序时会出现如下错误
/usr/include/fftw3.h(371): error: identifier "__float128" is und ...
现在越来越多的高性能并行计算将MPI与GPU结合起来:MPI的将任务并行分发,CUDA进行并行计算。大大提高了并行效率。然而我们知道在GPU上进行计算时常常出现数据重CPU到GPU或从GPU到CPU的拷贝过程,在数据量大的情况下这种拷贝过程往往会花费很多时间。因此英伟达公司实现了一种新的技术:CUDA-aware MPI。改技术实现了GPU缓存的直接访问,这样就很好地避免了在使用MPI+CUDA进行并行计算时数据拷贝花费的大量时间。
CUDA-aware MPI 具体介绍:https://devblogs.nvidia.com/parallelforall/introduction ...
使用CUDA实现两个数组的相加,熟悉CUDA相关函数的使用。
#include <cuda_runtime.h>
#include <stdio.h>
__global__ void addKernel( int* c, const int* a, const int* b )
{
int i = threadIdx.x;
c[i]= a[i] + b[i];
}
cudaError_t CUDA_Add( const int* a, const int* b, int* out, int size )
{ ...
MPI是一个跨语言的通讯协议,用于编写并行计算机。支持点对点和广播。MPI是一个信息传递应用程序接口,包括协议和和语义说明,他们指明其如何在各种实现中发挥其特性。MPI的目标是高性能,大规模性,和可移植性。MPI在今天仍为高性能计算的主要模型。
1.MPI初始函数
头文件: mpi.h/mpif.h. int MPI_Init(int *argc, char ***argv) 启动MPI环境,标志并行代码的开始. 并行代码之前,第一个mpi函数(除MPI_Initialize()外). 要求main必须带能运行,否则出错. 通信子(通信空间) ...
并行计算学习之OpenMP
- 博客分类:
- 并行计算
1. OpenMP基本概念
OpenMP是共享存储体系结构上的 一个并行编程模型。适合于SMP共享内存多处理系统和多核处理器体系结构。
OpenMP是基于线程的并行编程模型。 OpenMP采用Fork-Join并行执行方式: OpenMP程序开始于一个单独的主线程(Master Thread),然后主线程一直串行执行,直到遇见第一个并行域(Parallel Region),然后开始并行执行并行域。其过程如下: Fork:主线程创建一个并行线程队列,然后,并行域中的代码在不同的线程上并行执行; Join:当并行域执行完之后,它们或被同步或被中断,最后只有 ...
1.线程与进程
相对进程而言,线程是一个更加接近于执行体的概念,它可以与同进程中的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。在串行程序基础上引入线程和进程是为了提高程序的并发度,从 ...
Android应用的更新检测与安装
- 博客分类:
- Android
Android应用的更新检测与安装大致步骤就是,从服务器获取应用的版本信息->与当前手机应用版本信息比较->下载最新版本应用->安装
1.从服务器获取应用的版本信息并检测是否更
/*
* 检测是否有新版本,有点话升级
*/
private void checkUpdate() {
new Thread(){
public void run() {
Message msg=Message.obtain();
try {
URL url=new URL(getString(R.string.s ...
FragmentTabHost 实现底部android底部菜单的切换
效果图:
布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
< ...
在Android我们能通过建立当前应用的数据库SQLiteDataBase,供本应用对数据的存取。但当多个应用需要共用同一数据时,我们怎么办呢?在Android系统中没有一个公共的内存区域,供多个应用共享存储数据。这里就要用到ContentProvider(内容提供者)。
Android中的ContentProvider机制可支持在多个应用中存储和读取数据。这也是跨应用共享数据的唯一方式。
ContentProvider 实际上就是提供一个接口方法,多个应用可以通过接口方法访问同一数据库的内容,即用到ContentResolver(内容解析者)来调用方法。
在 ...
Android提供了几种数据或文件的存储方式:
读写sdcard,SharedPreference, 数据库
下面初步了解一下。
一.读写sdcard。
android中文件读写到sdcard与一般java思路一样,通过I/O流进行读写。下面直接代码:
添加权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
public class SavecontentService {
private C ...
Android 常见动画为补间动画(透明,缩放,平移,旋转)与帧动画。下面说说补间动画的实现。
1.在配置文件中建立动画
在res目录下建立anim文件夹,在res/anim目录下建立动画配置文件如下:
透明动画alpha.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- 各动 ...
Ajax是一种支持异步请求的技术。简而言之JavaScript向服务器提出请求并处理响应,而不阻塞用户 。
XmlHttpRequest是Ajax的核心,可以在不想服务器提交整个页面的前提下实现局部刷新。
XMLHttpRequest 对 ...