cuda流测试=basic_single_stream

cuda流测试

  1 /*
  2 * Copyright 1993-2010 NVIDIA Corporation.  All rights reserved.
  3 *
  4 * NVIDIA Corporation and its licensors retain all intellectual property and
  5 * proprietary rights in and to this software and related documentation.
  6 * Any use, reproduction, disclosure, or distribution of this software
  7 * and related documentation without an express license agreement from
  8 * NVIDIA Corporation is strictly prohibited.
  9 *
 10 * Please refer to the applicable NVIDIA end user license agreement (EULA)
 11 * associated with this source code for terms and conditions that govern
 12 * your use of this NVIDIA software.
 13 *
 14 */
 15
 16
 17 #include "../common/book.h"
 18 #include "cuda.h"
 19 #include "cuda_runtime.h"
 20 #include "device_launch_parameters.h"
 21 #define N   (1024*1024)
 22 #define FULL_DATA_SIZE   (N*20)
 23
 24
 25 __global__ void kernel(int *a, int *b, int *c) {
 26     int idx = threadIdx.x + blockIdx.x * blockDim.x;
 27     if (idx < N) {
 28         //idx后两个数
 29         int idx1 = (idx + 1) % 256;
 30         int idx2 = (idx + 2) % 256;
 31         float   as = (a[idx] + a[idx1] + a[idx2]) / 3.0f;
 32         float   bs = (b[idx] + b[idx1] + b[idx2]) / 3.0f;
 33         c[idx] = (as + bs) / 2;
 34     }
 35 }
 36
 37
 38 int main(void) {
 39     cudaDeviceProp  prop;
 40     int whichDevice;
 41     HANDLE_ERROR(cudaGetDevice(&whichDevice));
 42     HANDLE_ERROR(cudaGetDeviceProperties(&prop, whichDevice));
 43     if (!prop.deviceOverlap) {
 44         printf("Device will not handle overlaps, so no speed up from streams\n");
 45         return 0;
 46     }
 47
 48     cudaEvent_t     start, stop;
 49     float           elapsedTime;
 50
 51     cudaStream_t    stream;
 52     int *host_a, *host_b, *host_c;
 53     int *dev_a, *dev_b, *dev_c;
 54
 55     // start the timers
 56     HANDLE_ERROR(cudaEventCreate(&start));
 57     HANDLE_ERROR(cudaEventCreate(&stop));
 58
 59     //初始化流
 60     HANDLE_ERROR(cudaStreamCreate(&stream));
 61
 62     // allocate the memory on the GPU
 63     HANDLE_ERROR(cudaMalloc((void**)&dev_a,
 64         N * sizeof(int)));
 65     HANDLE_ERROR(cudaMalloc((void**)&dev_b,
 66         N * sizeof(int)));
 67     HANDLE_ERROR(cudaMalloc((void**)&dev_c,
 68         N * sizeof(int)));
 69
 70     //分配由于GPU访问的主机无分页内存(锁定内存页)
 71     HANDLE_ERROR(cudaHostAlloc((void**)&host_a,
 72         FULL_DATA_SIZE * sizeof(int),
 73         cudaHostAllocDefault));
 74     HANDLE_ERROR(cudaHostAlloc((void**)&host_b,
 75         FULL_DATA_SIZE * sizeof(int),
 76         cudaHostAllocDefault));
 77     HANDLE_ERROR(cudaHostAlloc((void**)&host_c,
 78         FULL_DATA_SIZE * sizeof(int),
 79         cudaHostAllocDefault));
 80
 81     for (int i = 0; i<FULL_DATA_SIZE; i++) {
 82         host_a[i] = rand();
 83         host_b[i] = rand();
 84     }
 85
 86     HANDLE_ERROR(cudaEventRecord(start, 0));
 87     // now loop over full data, in bite-sized chunks
 88     for (int i = 0; i<FULL_DATA_SIZE; i += N) {
 89         //异步复制主机上内存的值到设备上
 90         HANDLE_ERROR(cudaMemcpyAsync(dev_a, host_a + i,
 91             N * sizeof(int),
 92             cudaMemcpyHostToDevice,
 93             stream));
 94         HANDLE_ERROR(cudaMemcpyAsync(dev_b, host_b + i,
 95             N * sizeof(int),
 96             cudaMemcpyHostToDevice,
 97             stream));
 98
 99         kernel << <N / 256, 256, 0, stream >> >(dev_a, dev_b, dev_c);
100
101         //将计算的值复制会主机
102         HANDLE_ERROR(cudaMemcpyAsync(host_c + i, dev_c,
103             N * sizeof(int),
104             cudaMemcpyDeviceToHost,
105             stream));
106
107     }
108     //从锁定页将结果块复制到主机内存
109     HANDLE_ERROR(cudaStreamSynchronize(stream));
110
111     HANDLE_ERROR(cudaEventRecord(stop, 0));
112
113     HANDLE_ERROR(cudaEventSynchronize(stop));
114     HANDLE_ERROR(cudaEventElapsedTime(&elapsedTime,
115         start, stop));
116     printf("Time taken:  %3.1f ms\n", elapsedTime);
117
118     // cleanup the streams and memory
119     HANDLE_ERROR(cudaFreeHost(host_a));
120     HANDLE_ERROR(cudaFreeHost(host_b));
121     HANDLE_ERROR(cudaFreeHost(host_c));
122     HANDLE_ERROR(cudaFree(dev_a));
123     HANDLE_ERROR(cudaFree(dev_b));
124     HANDLE_ERROR(cudaFree(dev_c));
125     HANDLE_ERROR(cudaStreamDestroy(stream));
126
127     return 0;
128 }

项目打包下载

时间: 2024-10-07 23:11:55

cuda流测试=basic_single_stream的相关文章

43Exchange 2010升级到Exchange 2013-CAS切换邮件流测试

17.6.5 更改内网DNS 更改Autodiscover记录到EX2013 CAS NLB群集 更改内网mail记录指向EX2013 CAS NLB群集 17.6.5 邮件流测试(内外CAS切换) 17.6.5.1 EX2013用户OWA登陆 登陆OWA, Robin用户位于a广州总部的EX2013邮箱服务器上 可以看到,进入的是2013的界面 17.6.5.2 EX2010 GZ总部用户登陆OWA 下面使用位于广州总部Ex2010的Allen进行登陆测试 可以看到,自动重定向到了EX2010

53Exchange 2010升级到Exchange 2013-升级后邮件流测试

21.迁移到2013后邮件流测试 21.1 SH-SH 查看下用户邮箱分布 上海的TOM发送一份邮件给上海的Susan 邮件流: 21.2 GZ-SH 广州的Allen发送一份邮件给上海分支机构的Susan 邮件流 21.3 GZ-CONTOSO 广州总部的Allen发送一份邮件给公网CONTOSO域的张三 邮件流 21.4 SH-CONTOSO 上海分支机构的Susan发送一份邮件给公网CONTOSO域的张三 邮件流 公网CONTOSO域的张三回复一份邮件给上海分支机构的Susan 邮件流 2

性能测试之线上引流测试--让性能测试更真实更丰富

为什么要做引流测试 目前为止大部分的测试是在测试环境下,通过模拟用户的行为来对系统进行验证,包括功能以及性能.在这个过程中,你可能会遇到以下问题: 用户访问行为比较复杂,模拟很难和用户行为一致,模拟不够真实; 线下模拟场景有限,会出现业务覆盖不全的情况.引流测试就是为了解决以上问题,通过把线上的真实流量复制到线下环境,解决测试环境模拟不够真实,或覆盖不够全面的问题. 引流的做法 目前不少公司对引流测试进行了实践,主要有以下4种引流方式: 以上几种办法各有利弊,有的是需要自己开发相应的工具来支持.

51Exchange 2010升级到Exchange 2013-邮件流测试(切换发送连接器)

19.4.9 邮件流测试(更新发送连接器到2013源) 19.4.9.1 公网CONTOSO与广州总部 测试公网CONTOSO域的张三发送邮件给广州总部的EX2013上的ROBIN 收到邮件 邮件流 答复一份 邮件流 19.4.9.2 公网Allen与广州总部Robin 收到邮件 邮件流: 19.4.8.3 公网CONTOSO与上海EX2010 TOM 公网CONTOSO域的张三发送一份邮件给上海分支机构的TOM 邮件流: 回复一份邮件 邮件流,可以看到,直接从上海出外网,不经过总部,因为我们在

26Exchange Server 2010跨站点部署-内外网邮件流测试

13.测试邮件流 13.1 公网CONTOSO发送到公网ROBIN 测试公网CONTOSO域张三 [email protected] 发送邮件给公网上的Allen 邮件流:03DC02àEX01 13.2 测试公网GZ-ROBIN到公网CONTOSO 测试公网上的广州总部Allen发送邮件给公网上用户[email protected] 这里邮件在队列中未发送成功,使用DNS和NSLOOK查看无法解析到公网的CONTOSO域 在内网添加DNS条件转发CONTOSO,指向公网DNS 服务器192.1

22Exchange Server 2010跨站点部署-邮件流测试及重定向

11.5.2 OWA登陆发送测试(重定向) 使用https://mail.robin.com/owa登陆下上海分支机构的用户 可以看到,登陆成功,这里就使用到了重定向 11.5.3 SH-GZ邮件流 下面从上海分支机构发送一份右键给位于广州总部的Allen, 看看邮件流 广州总部Allen收到上海分支机构TOM发来的邮件 查看下邮件头 复制到记事本中查看一下,邮件流如下,可以看到邮件流从EX06àEX05àEX01 11.5.3 SH-SH邮件流 再来一个两个都位于SH 站点的用户发送邮箱 在广

两个VLC实现播放串流测试

实现原理: 一个VLC打开视频文件发布串流(格式HTTP.RTP.RTSP等),另一个VLC打开串流播放 发布串流步骤: 1.菜单“媒体”->“流”,先添加视频文件.选择“串流”,如下图: 2.设置串流发布格式,本测试选择“RTSP”,点击“添加” 3.设置RTSP端口及路径.去掉激活转码,测试中如此项选中,VLC崩溃 4.选项设置:点击“串流”完成.此时串流发布成功. 打开发布的串流: 另打开一个VLC,菜单”媒体“->“网络”,URL输入刚才发布的,如下图 最终实现效果如下图:

开发rtmp直播流测试地址

目前流媒体直播流除了用HLS来做,很多还是用rtmp协议,在这里我先粘帖个测试流地址供大家调试开发: rtmp://live.hkstv.hk.lxdns.com/live/hks 版权声明:本文为博主原创文章,未经博主允许不得转载.

CUDA实例练习(十):多个cuda流

1 #include <stdio.h> 2 #include <cuda_runtime.h> 3 #include <device_launch_parameters.h> 4 #include "book.h" 5 6 #define N (1024*1024) 7 #define FULL_DATA_SIZE (N * 20) 8 9 __global__ void kernel(int *a, int *b, int *c){ 10 int