上午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的目的很明确,就是要分块。
而上面一行&#xff08;L_A<3000000&#xff09;?16384:131072;这行一开始我也不明白&#xff0c;为什么要2的十三次方&#xff0c;又17次方&#xff1f;就是说&#xff0c;字符串如果过长&#xff0c;就分配更多的线程&#xff0c;小于30万则13次方就够了。至于为什么是30万我还没搞清。
而blocksize则更容易解释了&#xff0c;就是待处理字符串的长度&#xff0c;即每个线程块中的线程
DATA_SZ_A &#61; L_A * sizeof(int); 这句的意思就是数据大小&#xff0c;但是为什么是字符串长度乘上二倍呢&#xff0c;没搞清楚
再就是GridSize和BlockSize如何设置的问题
***
跟丁师兄他们吃完饭路上八卦了一下&#xff0c;然后回来找到了一个CUDA的教程&#xff0c;比较实用
http://www.cnblogs.com/viviman/archive/2012/11/28/2792521.html
特别是最后提了&#xff1a;Block数目与其Size有如下几种设定方式&#xff1a; Ø 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号&#xff0c;在网建办&#xff0c;程序看明白到Length的
int noBlocks &#61; NO_THREADS/L_B;
int Length &#61; (L_A- L_B)/noBlocks;
int L_A_ &#61; Length &#43; L_B;
前一阵一直不明白为什么要用length&#xff0c;这里的length其实就是为了让两个序列对齐
CUDA中的计时:
cudaEvent_t start,stop;
cudaEventCreate(&start);
cudaEventCreate(&stop);
cudaEventRecord(start,0);
***
下午搜cudaMemcpy的时候&#xff0c;找到了魏老师说的那个论坛&#xff0c;于是找了一下
http://bbs.gpuworld.cn/thread-8758-1-1.html
***
晚上5点半吃晚饭去天外天技术交流&#xff0c;于是回实验室登录了一下论坛&#xff0c;学术资源确实很多&#xff0c;找了一个论坛http://bbs.myboyan.com/index.php?x&#61;151776