我有一个GeForce GTX 580,我想说明可以(理想情况下)实际并行运行的线程总数,以便与2或4个多核CPU进行比较.
deviceQuery为我提供了以下可能的相关信息:
CUDA Capability Major/Minor version number: 2.0
(16) Multiprocessors x (32) CUDA Cores/MP: 512 CUDA
Maximum number of threads per block: 1024
Run Code Online (Sandbox Code Playgroud)
我想我听说每个CUDA核心都可以并行运行warp,并且warp是32个线程.说卡可以并行运行512*32 = 16384个线程,或者我离开了,CUDA内核是不是真的并行运行?
首先我要说的是,我仔细阅读了关于SO的所有类似问题:
我的目的是尝试动态计算(而不是硬编码值)我正在开发的前馈神经网络库.
我的数据不是正方形点阵(矩阵),正如我所看到的大多数例子一样,而是两个向量产生矩阵,行到行的行数不等:
float x[6] {1.f, 1.f, 0.f, 1.f, 1.f, 0.f};
thrust::device_vector<float> in_vec( x, x+6 );
float y[9] {1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f};
thrust::device_vector<float> w_vec( y, y+9 );
thrust::device_vector<float> o_wec(9);
thrust::device_vector<float> mtx_vec( 9 * 6 );
float * i_ptr = thrust::raw_pointer_cast( in_vec.data() );
float * w_ptr = thrust::raw_pointer_cast( w_vec.data() );
float * out_ptr = thrust::raw_pointer_cast( mtx_vec.data() );
dim3 threadsPerBlock(9,6);
dim3 numBlocks(1,1);
prop_mtx<<<numBlocks,threadsPerBlock>>>( w_ptr, i_ptr, out_ptr, 6 );
Run Code Online (Sandbox Code Playgroud)
和内核:
__global__ void …Run Code Online (Sandbox Code Playgroud)