我想使用流来并行化在单独的设备数据阵列上工作的内核的执行.数据在设备上分配并从先前的内核填充.
我写了以下程序,显示到目前为止我无法达到目标.实际上,两个非默认流上的内核在它们各自的流中顺序执行.
在具有最新Debian linux版本的2台Intel机器上观察到相同的行为.其中一款配备了CUDA 4.2的Tesla C2075,另一款配备了带有CUDA 5.0的Geforce 460GT.Visual Profiler显示4.2和5.0 CUDA版本中的顺序执行.
这是代码:
#include <iostream>
#include <stdio.h>
#include <ctime>
#include <curand.h>
using namespace std;
// compile and run this way:
// nvcc cuStreamsBasics.cu -arch=sm_20 -o testCuStream -lcuda -lcufft -lcurand
// testCuStream 1024 512 512
/* -------------------------------------------------------------------------- */
// "useful" macros
/* -------------------------------------------------------------------------- */
#define MSG_ASSERT( CONDITION, MSG ) \
if (! (CONDITION)) \
{ \
std::cerr << std::endl << "Dynamic assertion `" #CONDITION "` failed in " << __FILE__ \
<< " …Run Code Online (Sandbox Code Playgroud)