增加计时函数 GPGPU编程技术-从GLSL、CUDA到OpenCL 平方和算法第一版
来源:互联网 发布:大学生兼职知乎 编辑:程序博客网 时间:2024/06/05 14:48
在本函数中增加了计时的功能,需要time.h库函数已经在头文件中添加。
//GPGPU编程技术-从GLSL、CUDA到OpenCL 平方和算法第一版 增加计时函数//书中程序160页#include <stdio.h>#include <iostream>#include <cuda_runtime.h> // For the CUDA runtime routines (prefixed with "cuda_")#include <DEVICE_LAUNCH_PARAMETERS.h> //我在查询中找到的头文件 有可能有别的表达方式#include <time.h> //计时用的函数库#define DATA_SIZE 1048567 //4MB 的数据using namespace std;int anData[DATA_SIZE];//生成随机数据量void GenerateNumber(int *pnNumber, int nSize){ for (int i = 0; i < nSize; i++) pnNumber[i] = rand();}//全局函数计算平方和内核:在主机上调用,在设备上执行__global__ static void sumofSquares(int *pnNum, int* pnResult,clock_t *pclock_ttime){ int nSum = 0; //计时开始 clock_t clock_tstart = clock(); for (unsigned i = 0; i < DATA_SIZE; i++) { nSum += pnNum[i] * pnNum[i]; *pnResult = nSum; } //计时结束 *pclock_ttime = clock() - clock_tstart;}void main(){ GenerateNumber(anData, DATA_SIZE); //生成随机数据量 int *pnGpuData, *pnResult; clock_t *pclock_ttime;//储存时间的 cudaMalloc ((void**)&pnGpuData, sizeof(int) * DATA_SIZE); cudaMalloc ((void**)&pnResult , sizeof(int) ); cudaMalloc((void**)&pclock_ttime, sizeof(clock_t)); cudaMemcpy(pnGpuData, anData, sizeof(int)*DATA_SIZE, cudaMemcpyHostToDevice); //本版本是基础版本 在此基础上学习逐渐内存与内核并行优化 //所以这里只用了一个内核 sumofSquares <<< 1,1 >>> (pnGpuData, pnResult,pclock_ttime); int nSum = 0; cudaMemcpy(&nSum, pnResult, sizeof(int), cudaMemcpyDeviceToHost); clock_t pclocksum; cudaMemcpy(&pclocksum,pclock_ttime, sizeof(clock_t), cudaMemcpyDeviceToHost); cudaFree(pnGpuData); cudaFree(pnResult); printf("SuM = %d Time = %d\n", nSum, pclocksum); system("pause"); //return 0;}
上边程序有点小错
//GPGPU编程技术-从GLSL、CUDA到OpenCL 平方和算法第一版 增加计时函数//书中程序160页#include <stdio.h>#include <iostream>#include <cuda_runtime.h> // For the CUDA runtime routines (prefixed with "cuda_")#include <DEVICE_LAUNCH_PARAMETERS.h> //我在查询中找到的头文件 有可能有别的表达方式#include <time.h> //计时用的函数库#define DATA_SIZE 1048576 //4MB 的数据//#define THREAD_NUM 256 //线程数using namespace std;int anData[DATA_SIZE];//生成随机数据量void GenerateNumber(int *pnNumber, int nSize){ for (int i = 0; i < nSize; i++) pnNumber[i] = rand() % 10;}//全局函数计算平方和内核:在主机上调用,在设备上执行__global__ static void sumofSquares(int *pnNum, int* pnResult,clock_t *pclock_ttime){ //const int tid = threadIdx.x; //const int nSize = DATA_SIZE / THREAD_NUM; //int nSum = 0; //计时开始 clock_t clock_tstart = clock(); for (unsigned i = 0; i < DATA_SIZE; i++) { nSum = (pnNum[i] * pnNum[i]) + nSum; } *pnResult = nSum; //计时结束 *pclock_ttime = clock() - clock_tstart;}void main(){ GenerateNumber(anData, DATA_SIZE); //生成随机数据量 int *pnGpuData, *pnResult; clock_t *pclock_ttime;//储存时间的 cudaMalloc ((void**)&pnGpuData, sizeof(int) * DATA_SIZE); cudaMalloc ((void**)&pnResult , sizeof(int) ); cudaMalloc((void**)&pclock_ttime, sizeof(clock_t)); cudaMemcpy(pnGpuData, anData, sizeof(int)*DATA_SIZE, cudaMemcpyHostToDevice); //本版本是基础版本 在此基础上学习逐渐内存与内核并行优化 //所以这里只用了一个内核 sumofSquares <<< 1,1 >>> (pnGpuData, pnResult,pclock_ttime); int nSum = 0; cudaMemcpy(&nSum, pnResult, sizeof(int), cudaMemcpyDeviceToHost); clock_t pclocksum; cudaMemcpy(&pclocksum,pclock_ttime, sizeof(clock_t), cudaMemcpyDeviceToHost); cudaFree(pnGpuData); cudaFree(pnResult); cudaFree(pclock_ttime); printf("SuM = %d Time = %d\n", nSum, pclocksum); system("pause"); //return 0;}
改动了一点点
0 0
- 增加计时函数 GPGPU编程技术-从GLSL、CUDA到OpenCL 平方和算法第一版
- GPGPU编程技术-从GLSL、CUDA到OpenCL 平方和算法第一版 书中程序158页
- GPGPU编程技术-从GLSL、CUDA到OpenCL 平方和算法第三版
- GPGPU OpenCL/CUDA 高性能编程的10大注意事项
- GPGPU OpenCL/CUDA 高性能编程的10大注意事项
- 【并行计算-CUDA开发】GPGPU OpenCL/CUDA 高性能编程的10大注意事项
- GPGPU-Sim:一款支持Nvidia的CUDA和OpenCL并行编程模型的仿真器
- GPGPU OpenCL编程步骤与简单实例
- GPGPU OpenCL编程步骤与简单实例
- GPGPU OpenCL编程步骤与简单实例
- GPGPU OpenCL编程步骤与简单实例
- cuda的计时技术
- DayDayUp - CUDA、GPGPU,GPU通用计算技术
- CUDA中的计时函数
- 从CUDA开始读OpenCL
- CUDA学习笔记(4) CUDA计时函数
- CUDA之常用算法:求平方和
- CUDA与OpenCL编程框架的比较
- Error:Execution failed for task ':app:proguardRelease'.> java.io.IOException: Can't read [D:\android
- mina —— 分布式集群下长连接session共享的解决方案
- Python程序转换为exe程序,py2exe的使用方法
- Leetcode-121. Best Time to Buy and Sell Stock
- 2c问题记录
- 增加计时函数 GPGPU编程技术-从GLSL、CUDA到OpenCL 平方和算法第一版
- 如何产生随机数
- 欧拉工程第29题 a的b次方(2≤a,b≤100)中共有多少个不同的数
- linux下安装svn及配置
- powercfg
- 基于TestNG使用PowerMock的Mockito扩展在Maven测试项目中的配置说明
- 集合框架笔记6(备忘)
- 读书笔记:Deep Learning [Ada-Computation&ML series]--chapter13.Linear factor model
- JavaScript中函数参数的值传递和引用传递