12月上旬的一些记录

上午8点一直等着ben,ben来了之后告诉我,他最近太忙,等着他发邮件。。。。

****

中午考完了学术规范,题目还是比较难

新暖壶的苦味可用泡瓶塞解决。

***

http://www.docin.com/p-503100080.html

这个是CUDA技术培训的一个教程,可以作为书上的补充

晚上找到了另一个教程http://www.youku.com/playlist_show/id_25920932.html

忽然发现自己根本没使用nsight,当然无法在线程级别上调试。于是N多绕路,找了个教程https://cudazone.nvidia.cn/forum/forum.php?mod=viewthread&tid=6290

******

CUDA程序里用到了MPI,也就是多核之间的通信的问题。看到目前的程度我才明白唐老师开学时候跟我提的MPI,那时候确实是一知半解。

不过现在也遇到一些问题:

在调用MPI_Comm_size(MPI_COMM_WORLD,&NumProcs);的时候,读到的NumProcs总是1,可是我一开始设置就是2呢。。这里显然是要获取默认组的大小

我使用的MPI的实现是MPICH2,书上说这个是Argonne和MSU研制的。

MPI程序的所有进程形成一个默认的组,MPI命名为Communicator MPI_COMM_WORLD组。

****

今天上午在行政楼网建办8点半到11点多一直在弄CUDA,但是一直没弄清楚kernel。

下午忽然明白了diagonalComputation里面的参数值是怎么来的了。

github的代码中,(NO_THREADS/L_B)*L_B的目的很明确,就是要分块。

而上面一行(L_A<3000000)?16384:131072;这行一开始我也不明白,为什么要2的十三次方,又17次方?就是说,字符串如果过长,就分配更多的线程,小于30万则13次方就够了。至于为什么是30万我还没搞清。

而blocksize则更容易解释了,就是待处理字符串的长度,即每个线程块中的线程

 DATA_SZ_A = L_A * sizeof(int); 这句的意思就是数据大小,但是为什么是字符串长度乘上二倍呢,没搞清楚

再就是GridSize和BlockSize如何设置的问题

 ***

跟丁师兄他们吃完饭路上八卦了一下,然后回来找到了一个CUDA的教程,比较实用

http://www.cnblogs.com/viviman/archive/2012/11/28/2792521.html

特别是最后提了:Block数目与其Size有如下几种设定方式: Ø 2 blocks x 384 threads Ø 3 blocks x 256 threads Ø 4 blocks x 192 threads Ø 6 blocks x 128 threads Ø 8 blocks x 96 threads 

****

今天4号,在网建办,程序看明白到Length的

int noBlocks = NO_THREADS/L_B;
    int Length = (L_A- L_B)/noBlocks;
    int L_A_ = Length + L_B;

前一阵一直不明白为什么要用length,这里的length其实就是为了让两个序列对齐

CUDA中的计时:

cudaEvent_t start,stop;
cudaEventCreate(&start);
cudaEventCreate(&stop);
cudaEventRecord(start,0);

***

下午搜cudaMemcpy的时候,找到了魏老师说的那个论坛,于是找了一下

http://bbs.gpuworld.cn/thread-8758-1-1.html

***

晚上5点半吃晚饭去天外天技术交流,于是回实验室登录了一下论坛,学术资源确实很多,找了一个论坛http://bbs.myboyan.com/index.php?x=151776

原文地址:https://www.cnblogs.com/ubiwind/p/5011934.html