- 浏览: 679449 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (181)
- Matlab (16)
- Java (26)
- autoHotkey (4)
- openCV (1)
- C++ (50)
- PDF-XChange Viewer (2)
- 学术 (11)
- javascript (4)
- linux (11)
- SWT (9)
- latex (7)
- GAE (2)
- windows (6)
- C# (3)
- PS (20)
- JNI (4)
- latex,批处理 (0)
- 批处理 (4)
- Android (5)
- 矩阵论 (1)
- SVM (1)
- 概率图模型 (0)
- Python (12)
- Eigen (5)
- 编程题 (1)
- MKL (1)
- 神经网络 (9)
- 最优化 (2)
- 摄影 (1)
- PPT (0)
- After Effects (3)
- CUDA (3)
- caffe (0)
- MXNet (2)
- svn (1)
- R (0)
- 虚拟机 (0)
- tensorflow (7)
- theano (1)
- Keras (1)
- vim (1)
- xgboost (1)
- spark (6)
- eclipse (2)
- word2vec (0)
- hadoop (1)
- dmlc (1)
- git (0)
最新评论
-
jeffersonz:
请问大神,这个插件记录下来的脚本为什么不能再Extendscr ...
PhotoShop - 记录PS的所有操作为JavaScript代码 -
cherishLC:
Andy__Zou 写道cherishLC 写道Andy__Z ...
Eigen的编译选项;MKL的使用 -
Andy__Zou:
cherishLC 写道Andy__Zou 写道cherish ...
Eigen的编译选项;MKL的使用 -
cherishLC:
Andy__Zou 写道cherishLC 写道Andy__Z ...
Eigen的编译选项;MKL的使用 -
Andy__Zou:
cherishLC 写道Andy__Zou 写道 您好,您的工 ...
Eigen的编译选项;MKL的使用
调用CUDA的核函数时指定block 和 thread大小,该大小可以是dim3类型的(三维数组),只用一维时可以是usigned int型的。
以下程序验证了当block或thread大小超出硬件允许值时会产生异常!!!GPU根本不会执行运算!!!
所以验证结果的正确性很重要!!!
在VS中创建CUDA项目会有一个模板,里面有更详细的状态验证。
以下程序在K5000GPU上跑的。
奇怪的是cuda samples中的deviceQuery程序给出的block大小的第一维可以到2^31,但实测还是只有655535!!!
程序输出如下:
以下程序验证了当block或thread大小超出硬件允许值时会产生异常!!!GPU根本不会执行运算!!!
所以验证结果的正确性很重要!!!
在VS中创建CUDA项目会有一个模板,里面有更详细的状态验证。
以下程序在K5000GPU上跑的。
奇怪的是cuda samples中的deviceQuery程序给出的block大小的第一维可以到2^31,但实测还是只有655535!!!
#include <cuda.h> #include "cuda_runtime.h" #include "device_launch_parameters.h" #include <iostream> #include <string> #include <sstream> #include <random> cudaDeviceProp getCudaDeviceProperties(int deviceIdx = 0) { cudaSetDevice(deviceIdx); cudaDeviceProp deviceProp; cudaGetDeviceProperties(&deviceProp, deviceIdx); return deviceProp; } ///在GPU上跑的函数,被称为kernel function __global__ void productArray_bt_kernel(float *pa, float *pb, float *pResult, int N) { int idx = blockDim.x * blockIdx.x + threadIdx.x; if (idx < N) pResult[idx] = pa[idx] * pb[idx]; } ///kernel function 的辅助函数,用于自动分配内存、验证结果等;此处将内存的分配、拷贝放在了外部!因为同一参数要执行好多次 void productArray_bt(float *pa, float *pb, float *pResult, int N, int threadNum = 32) throw(std::string) { cudaError_t cudaStatus; int blockNum = (N - 1) / threadNum + 1; dim3 bd(blockNum, 1, 1); productArray_bt_kernel << <blockNum, threadNum >> > (pa, pb, pResult, N); // Check for any errors launching the kernel cudaStatus = cudaGetLastError(); if (cudaStatus != cudaSuccess) { std::stringstream ss; ss << "productArray_bt_kernel launch failed: " << cudaGetErrorString(cudaStatus) << "\n\tblockNum=" << blockNum << ";\tthreadNum=" << threadNum << ";\t"; std::string errStr = ss.str(); //std::cerr << errStr << std::endl; throw errStr; } // cudaDeviceSynchronize waits for the kernel to finish, and returns // any errors encountered during the launch. cudaStatus = cudaDeviceSynchronize(); if (cudaStatus != cudaSuccess) { std::stringstream ss; ss << "cudaDeviceSynchronize returned error code" << cudaStatus << "after launching addKernel!" << "\n\tblockNum=" << blockNum << ";\tthreadNum=" << threadNum << ";\t"; std::string errStr = ss.str(); //std::cerr <<errStr<< std::endl; throw errStr; } } void TestProductSpeed() { float *pa, *pb, *pResult; // host copies float *d_a, *d_b, *d_c; // device copies int N = 5; for (N = 1; N <= (1 << 20); N *= 2) { std::cout << "\n\n**************数组长度为 " << N << " 的测试\n"; int size = sizeof (float)* N; // Allocate space for device copies of pa, pb, pResult cudaMalloc((void **)&d_a, size); cudaMalloc((void **)&d_b, size); cudaMalloc((void **)&d_c, size); pa = new float[N]; pb = new float[N]; pResult = new float[N]; for (int i = 0; i < N; ++i) { pa[i] = i; pb[i] = i * 10; } // Copy inputs to device cudaMemcpy(d_a, pa, size, cudaMemcpyHostToDevice); cudaMemcpy(d_b, pb, size, cudaMemcpyHostToDevice); //std::cout << "blockDim.x=" << blockDim.x<<std::endl; // Launch add() kernel on GPU for (int threadNum = 1; threadNum <= 4096; threadNum *= 4) { try{ cudaEvent_t start, stop; cudaEventCreate(&start); cudaEventCreate(&stop); cudaEventRecord(start, 0); { //统计GPU耗时的代码段 productArray_bt(d_a, d_b, d_c, N, threadNum); } cudaEventRecord(stop, 0); cudaEventSynchronize(stop); float costtime; cudaEventElapsedTime(&costtime, start, stop); std::cout << "数组长度=" << N << ";\t" << "treadNum=" << threadNum << ";\t" << "点积用时:" << costtime / 1000 << "s" << std::endl; // Copy result back to host cudaMemcpy(pResult, d_c, size, cudaMemcpyDeviceToHost); //验证结果的正确性 for (int i = 1; i < N; i *= 2) { //std::cout << "pa[i]=" << pa[i] << std::endl; if (pResult[i] != pa[i] * pb[i]) std::cout << "错误: " << "i=" << i << ";\ti*10i=" << pResult[i] << std::endl; } } catch (std::string s){ std::cout << "异常:" << s << std::endl; std::cout << "\t" << "数组长度=" << N << ";\t" << "treadNum=" << threadNum << ";\t" << std::endl; } catch (...){ std::cout << "未知的异常类型" << std::endl; std::cout << "\t\t" << "数组长度=" << N << ";\t" << "treadNum=" << threadNum << ";\t" << std::endl; } std::cout << std::endl; } // Cleanup cudaFree(d_a); cudaFree(d_b); cudaFree(d_c); delete[]pa; delete[]pb; delete[]pResult; } } #define printExp(x) std::cout<< #x <<" = "<< x <<std::endl; int main(void) { std::cout << __FILE__ << std::endl; TestProductSpeed(); return 0; }
程序输出如下:
***/testThreadSpeed.cu **************数组长度为 1 的测试 数组长度=1; treadNum=1; 点积用时:3.5904e-005s 数组长度=1; treadNum=4; 点积用时:0.000135648s 数组长度=1; treadNum=16; 点积用时:3.4592e-005s 数组长度=1; treadNum=64; 点积用时:3.2384e-005s 数组长度=1; treadNum=256; 点积用时:3.2928e-005s 数组长度=1; treadNum=1024; 点积用时:3.1296e-005s 异常:productArray_bt_kernel launch failed: invalid configuration argument blockNum=1; threadNum=4096; 数组长度=1; treadNum=4096; **************数组长度为 2 的测试 数组长度=2; treadNum=1; 点积用时:3.6448e-005s 数组长度=2; treadNum=4; 点积用时:3.3696e-005s 数组长度=2; treadNum=16; 点积用时:3.4368e-005s 数组长度=2; treadNum=64; 点积用时:2.9024e-005s 数组长度=2; treadNum=256; 点积用时:3.232e-005s 数组长度=2; treadNum=1024; 点积用时:3.2352e-005s 异常:productArray_bt_kernel launch failed: invalid configuration argument blockNum=1; threadNum=4096; 数组长度=2; treadNum=4096; **************数组长度为 4 的测试 数组长度=4; treadNum=1; 点积用时:3.6448e-005s 数组长度=4; treadNum=4; 点积用时:4.3488e-005s 数组长度=4; treadNum=16; 点积用时:3.248e-005s 数组长度=4; treadNum=64; 点积用时:3.3984e-005s 数组长度=4; treadNum=256; 点积用时:4.1952e-005s 数组长度=4; treadNum=1024; 点积用时:3.3632e-005s 异常:productArray_bt_kernel launch failed: invalid configuration argument blockNum=1; threadNum=4096; 数组长度=4; treadNum=4096; **************数组长度为 8 的测试 数组长度=8; treadNum=1; 点积用时:3.328e-005s 数组长度=8; treadNum=4; 点积用时:3.36e-005s 数组长度=8; treadNum=16; 点积用时:3.2032e-005s 数组长度=8; treadNum=64; 点积用时:3.2736e-005s 数组长度=8; treadNum=256; 点积用时:3.2416e-005s 数组长度=8; treadNum=1024; 点积用时:3.3376e-005s 异常:productArray_bt_kernel launch failed: invalid configuration argument blockNum=1; threadNum=4096; 数组长度=8; treadNum=4096; **************数组长度为 16 的测试 数组长度=16; treadNum=1; 点积用时:3.472e-005s 数组长度=16; treadNum=4; 点积用时:3.2224e-005s 数组长度=16; treadNum=16; 点积用时:3.2352e-005s 数组长度=16; treadNum=64; 点积用时:3.28e-005s 数组长度=16; treadNum=256; 点积用时:3.1648e-005s 数组长度=16; treadNum=1024; 点积用时:3.2672e-005s 异常:productArray_bt_kernel launch failed: invalid configuration argument blockNum=1; threadNum=4096; 数组长度=16; treadNum=4096; **************数组长度为 32 的测试 数组长度=32; treadNum=1; 点积用时:3.44e-005s 数组长度=32; treadNum=4; 点积用时:3.3472e-005s 数组长度=32; treadNum=16; 点积用时:3.1968e-005s 数组长度=32; treadNum=64; 点积用时:4.8256e-005s 数组长度=32; treadNum=256; 点积用时:3.4592e-005s 数组长度=32; treadNum=1024; 点积用时:3.3152e-005s 异常:productArray_bt_kernel launch failed: invalid configuration argument blockNum=1; threadNum=4096; 数组长度=32; treadNum=4096; **************数组长度为 64 的测试 数组长度=64; treadNum=1; 点积用时:3.5712e-005s 数组长度=64; treadNum=4; 点积用时:3.12e-005s 数组长度=64; treadNum=16; 点积用时:3.2352e-005s 数组长度=64; treadNum=64; 点积用时:3.1168e-005s 数组长度=64; treadNum=256; 点积用时:3.2064e-005s 数组长度=64; treadNum=1024; 点积用时:3.3376e-005s 异常:productArray_bt_kernel launch failed: invalid configuration argument blockNum=1; threadNum=4096; 数组长度=64; treadNum=4096; **************数组长度为 128 的测试 数组长度=128; treadNum=1; 点积用时:3.504e-005s 数组长度=128; treadNum=4; 点积用时:3.2544e-005s 数组长度=128; treadNum=16; 点积用时:3.1776e-005s 数组长度=128; treadNum=64; 点积用时:3.1744e-005s 数组长度=128; treadNum=256; 点积用时:3.1776e-005s 数组长度=128; treadNum=1024; 点积用时:3.1872e-005s 异常:productArray_bt_kernel launch failed: invalid configuration argument blockNum=1; threadNum=4096; 数组长度=128; treadNum=4096; **************数组长度为 256 的测试 数组长度=256; treadNum=1; 点积用时:3.5328e-005s 数组长度=256; treadNum=4; 点积用时:3.3408e-005s 数组长度=256; treadNum=16; 点积用时:3.456e-005s 数组长度=256; treadNum=64; 点积用时:3.3952e-005s 数组长度=256; treadNum=256; 点积用时:4.6336e-005s 数组长度=256; treadNum=1024; 点积用时:3.1776e-005s 异常:productArray_bt_kernel launch failed: invalid configuration argument blockNum=1; threadNum=4096; 数组长度=256; treadNum=4096; **************数组长度为 512 的测试 数组长度=512; treadNum=1; 点积用时:3.68e-005s 数组长度=512; treadNum=4; 点积用时:3.2064e-005s 数组长度=512; treadNum=16; 点积用时:3.2512e-005s 数组长度=512; treadNum=64; 点积用时:3.2736e-005s 数组长度=512; treadNum=256; 点积用时:3.136e-005s 数组长度=512; treadNum=1024; 点积用时:3.2128e-005s 异常:productArray_bt_kernel launch failed: invalid configuration argument blockNum=1; threadNum=4096; 数组长度=512; treadNum=4096; **************数组长度为 1024 的测试 数组长度=1024; treadNum=1; 点积用时:3.9552e-005s 数组长度=1024; treadNum=4; 点积用时:3.3568e-005s 数组长度=1024; treadNum=16; 点积用时:3.1712e-005s 数组长度=1024; treadNum=64; 点积用时:3.184e-005s 数组长度=1024; treadNum=256; 点积用时:3.5264e-005s 数组长度=1024; treadNum=1024; 点积用时:3.2544e-005s 异常:productArray_bt_kernel launch failed: invalid configuration argument blockNum=1; threadNum=4096; 数组长度=1024; treadNum=4096; **************数组长度为 2048 的测试 数组长度=2048; treadNum=1; 点积用时:4.7872e-005s 数组长度=2048; treadNum=4; 点积用时:3.4368e-005s 数组长度=2048; treadNum=16; 点积用时:3.2544e-005s 数组长度=2048; treadNum=64; 点积用时:5.648e-005s 数组长度=2048; treadNum=256; 点积用时:3.4336e-005s 数组长度=2048; treadNum=1024; 点积用时:3.5296e-005s 异常:productArray_bt_kernel launch failed: invalid configuration argument blockNum=1; threadNum=4096; 数组长度=2048; treadNum=4096; **************数组长度为 4096 的测试 数组长度=4096; treadNum=1; 点积用时:6.0384e-005s 数组长度=4096; treadNum=4; 点积用时:3.872e-005s 数组长度=4096; treadNum=16; 点积用时:3.328e-005s 数组长度=4096; treadNum=64; 点积用时:3.3344e-005s 数组长度=4096; treadNum=256; 点积用时:3.2832e-005s 数组长度=4096; treadNum=1024; 点积用时:3.3088e-005s 异常:productArray_bt_kernel launch failed: invalid configuration argument blockNum=1; threadNum=4096; 数组长度=4096; treadNum=4096; **************数组长度为 8192 的测试 数组长度=8192; treadNum=1; 点积用时:8.7168e-005s 数组长度=8192; treadNum=4; 点积用时:4.5664e-005s 数组长度=8192; treadNum=16; 点积用时:3.504e-005s 数组长度=8192; treadNum=64; 点积用时:3.2928e-005s 数组长度=8192; treadNum=256; 点积用时:3.2096e-005s 数组长度=8192; treadNum=1024; 点积用时:3.2128e-005s 异常:productArray_bt_kernel launch failed: invalid configuration argument blockNum=2; threadNum=4096; 数组长度=8192; treadNum=4096; **************数组长度为 16384 的测试 数组长度=16384; treadNum=1; 点积用时:0.000143616s 数组长度=16384; treadNum=4; 点积用时:6.08e-005s 数组长度=16384; treadNum=16; 点积用时:4.4512e-005s 数组长度=16384; treadNum=64; 点积用时:3.7184e-005s 数组长度=16384; treadNum=256; 点积用时:3.3088e-005s 数组长度=16384; treadNum=1024; 点积用时:3.2736e-005s 异常:productArray_bt_kernel launch failed: invalid configuration argument blockNum=4; threadNum=4096; 数组长度=16384; treadNum=4096; **************数组长度为 32768 的测试 数组长度=32768; treadNum=1; 点积用时:0.000344064s 数组长度=32768; treadNum=4; 点积用时:8.608e-005s 数组长度=32768; treadNum=16; 点积用时:4.4608e-005s 数组长度=32768; treadNum=64; 点积用时:3.568e-005s 数组长度=32768; treadNum=256; 点积用时:3.248e-005s 数组长度=32768; treadNum=1024; 点积用时:3.5552e-005s 异常:productArray_bt_kernel launch failed: invalid configuration argument blockNum=8; threadNum=4096; 数组长度=32768; treadNum=4096; **************数组长度为 65536 的测试 异常:productArray_bt_kernel launch failed: invalid argument blockNum=65536; threadNum=1; 数组长度=65536; treadNum=1; 数组长度=65536; treadNum=4; 点积用时:0.000200448s 数组长度=65536; treadNum=16; 点积用时:0.000135808s 数组长度=65536; treadNum=64; 点积用时:0.00033584s 数组长度=65536; treadNum=256; 点积用时:0.0003568s 数组长度=65536; treadNum=1024; 点积用时:0.000324992s 异常:productArray_bt_kernel launch failed: invalid configuration argument blockNum=16; threadNum=4096; 数组长度=65536; treadNum=4096; **************数组长度为 131072 的测试 异常:productArray_bt_kernel launch failed: invalid argument blockNum=131072; threadNum=1; 数组长度=131072; treadNum=1; 数组长度=131072; treadNum=4; 点积用时:0.00029168s 数组长度=131072; treadNum=16; 点积用时:0.00015808s 数组长度=131072; treadNum=64; 点积用时:0.000143424s 数组长度=131072; treadNum=256; 点积用时:4.2816e-005s 数组长度=131072; treadNum=1024; 点积用时:0.000152416s 异常:productArray_bt_kernel launch failed: invalid configuration argument blockNum=32; threadNum=4096; 数组长度=131072; treadNum=4096; **************数组长度为 262144 的测试 异常:productArray_bt_kernel launch failed: invalid argument blockNum=262144; threadNum=1; 数组长度=262144; treadNum=1; 异常:productArray_bt_kernel launch failed: invalid argument blockNum=65536; threadNum=4; 数组长度=262144; treadNum=4; 数组长度=262144; treadNum=16; 点积用时:0.000238848s 数组长度=262144; treadNum=64; 点积用时:0.000137728s 数组长度=262144; treadNum=256; 点积用时:0.000148288s 数组长度=262144; treadNum=1024; 点积用时:0.000140192s 异常:productArray_bt_kernel launch failed: invalid configuration argument blockNum=64; threadNum=4096; 数组长度=262144; treadNum=4096; **************数组长度为 524288 的测试 异常:productArray_bt_kernel launch failed: invalid argument blockNum=524288; threadNum=1; 数组长度=524288; treadNum=1; 异常:productArray_bt_kernel launch failed: invalid argument blockNum=131072; threadNum=4; 数组长度=524288; treadNum=4; 数组长度=524288; treadNum=16; 点积用时:0.000356736s 数组长度=524288; treadNum=64; 点积用时:0.00019056s 数组长度=524288; treadNum=256; 点积用时:0.000161248s 数组长度=524288; treadNum=1024; 点积用时:0.000157632s 异常:productArray_bt_kernel launch failed: invalid configuration argument blockNum=128; threadNum=4096; 数组长度=524288; treadNum=4096; **************数组长度为 1048576 的测试 异常:productArray_bt_kernel launch failed: invalid argument blockNum=1048576; threadNum=1; 数组长度=1048576; treadNum=1; 异常:productArray_bt_kernel launch failed: invalid argument blockNum=262144; threadNum=4; 数组长度=1048576; treadNum=4; 异常:productArray_bt_kernel launch failed: invalid argument blockNum=65536; threadNum=16; 数组长度=1048576; treadNum=16; 数组长度=1048576; treadNum=64; 点积用时:0.000241312s 数组长度=1048576; treadNum=256; 点积用时:0.000206912s 数组长度=1048576; treadNum=1024; 点积用时:0.000214688s 异常:productArray_bt_kernel launch failed: invalid configuration argument blockNum=256; threadNum=4096; 数组长度=1048576; treadNum=4096;
发表评论
-
C++函数中的静态变量
2019-07-19 11:22 762在C++中,可以在成员函数中使用静态变量,从而间接达到在hpp ... -
tensorflow 静态编译笔记 -- linux系统
2018-11-05 14:26 0注: 1、编译tensorflow静态库 很简单,参见: h ... -
gperftools笔记
2018-06-27 14:30 0export LD_LIBRARY_PATH=LD_LIBR ... -
dmlc分布式线性模型编译笔记
2018-06-06 10:37 21051、使用第三方修改后的wormhole工程 原始工程wor ... -
C++中读取控制台输出,并将文件指针FILE*转换为istream
2017-11-27 15:03 1707解决的问题: 1、通过执行系统的bash命令后,获取其输出( ... -
c++中使用boost库在共享内存中存储map
2017-11-09 11:37 5121boost库中的interprocess包可以在共享内存中创建 ... -
近似最近邻算法库FLANN
2017-04-25 18:45 0FLANN库是计算近似最近邻的库, 问题定义如下: 给定距离函 ... -
C++杂记-- 重定向std::cout等
2017-04-18 17:28 18881、屏蔽std::cout 参见:http://stackov ... -
Ubuntu16.04 源码安装GPU版tensorflow
2016-08-07 16:18 56092017年2月16日更新: tenso ... -
CMake指定目标代码的平台(win32,x64)
2016-06-03 20:54 11534主要参考自:http://blog.c ... -
windows 10下安装GPU版MXNet
2016-06-03 21:28 8527上回说到编译CPU版的MXNet: http://cheris ... -
windows下安装CPU版mxnet
2016-05-23 23:14 17487MXnet (mix net)类似Caffe,Tensorfl ... -
Linux C++编译及 静态/动态 链接库 笔记
2015-12-20 19:49 59861、C++文件的编译 g++参 ... -
Linux (Ubuntu) 下 Eclipse C++ 环境配置
2015-12-08 21:49 19201、安装JDK 参见http://blog.csdn.net/ ... -
Photoshop插件开发-filter
2015-10-11 22:53 3310初学,,感觉PS插件的文档很烂,,教程也很少,,也就这么简单学 ... -
使Visual Assist X支持CUDA的.cu文件的代码提示
2015-07-17 00:05 2227现在安装CUDA很方便了,直接支持Visual Studio。 ... -
创建及使用DLL
2014-09-29 15:22 1194此篇仅作简要的记录,作为备忘。 更为详细的可以参考:http: ... -
matlab的mexFunction中使用std::cout(部分转载)
2014-09-27 15:37 2124在matlab、C++混合编程的时候,可能会用到之前的代码。代 ... -
Eigen库:那些年我们一起经历的bug
2014-09-24 18:39 17701、使用auto声明新变量 ... -
C++:无虚函数的类作为有虚函数类的父类时产生Expression:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
2014-09-24 09:48 1899调程序时忘了为啥,写了一小段测试程序,再简单不过,结果跑出了E ...
相关推荐
CUDA并行程序设计:GPU编程指南共分为12章。 第1章 超级计算简史 第2章 使用GPU理解并行计算 第3章 CUDA硬件概述 第4章 CUDA环境搭建 第5章 线程网格、线程块以及线程 第6章 CUDA内存处理 第7章 CUDA实践之道 ...
本ppt详细介绍了cuda的基本理论以及cuda的编程模型,多线程和硬件结构,并通过几个案例讲解了cuda的基本应用。
设计了CUDA程序的二进制翻译框架,从CUDA程序可执行代码入手,采用“分而治之”的手段,将主机端代码和设备端代码分别翻译。重点介绍了移植过程中几个关键问题的解决,包括设备端代码的提取,计算模型的映射,存储...
CUDA中如何选择Block的尺寸 需要考虑的因素 如何分配效率最高
cuda的简单程序 cuda 简单程序(代码)
下面小编就为大家带来一篇使用Python写CUDA程序的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
cuda程序示例代码,包括CUDA入门代码,CUDA进阶代码和CUDA实用代码,为《并行计算教程(第1版)》的配套代码
CUDA程序优参考资料,从指令基础讲解,比较实用,供大家参考使用!
GPU高性能运算之CUDA_第3章 CUDA硬件架构
CUDA的编程指南,教您如何写CUDA程序,支持C/C++语言开发
CUDA并行程序设计 GPU编程指南-中文英文高清完整版(各500+页)
CUDA 入门小例子,简单实用,上手快,了解CUDA程序的框架,迅速入门
基于CUDA的C语言实例程序,该程序实现了比较CPU和GPU计算矩阵五次方所需时间。
cuda 源程序,gpu计算入门参考,《GPU高性能运算之cuda》里面的源程序
sp, sm, thread, block, grid, warp概念介绍。
矩阵乘法 GPU并行 CUDA程序 MATLAB + CUDA+C 亲测可运行
可以用来测试gpu,测试cuda环境是否配置好,显示cuda设备
CUDA并行程序设计 GPU编程指南CUDA并行程序设计 GPU编程指南CUDA并行程序设计 GPU编程指南