当前位置: 首页 > news >正文

html视频网站源码百度热度

html视频网站源码,百度热度,单仁网站建设,wordpress设定域名矩阵乘可以利用gpu多线程并行的特点进行加速计算,但是传统简单的方法需要多次读取数据到寄存器中,增加耗时,因此利用gpu的共享内存可以被一个block内的所有线程访问到的特性,结合tiling技术进行加速计算。 理论部分不解释了&#…

矩阵乘可以利用gpu多线程并行的特点进行加速计算,但是传统简单的方法需要多次读取数据到寄存器中,增加耗时,因此利用gpu的共享内存可以被一个block内的所有线程访问到的特性,结合tiling技术进行加速计算。
理论部分不解释了,网上有很多,关键在于网上很多利用共享内存计算的代码存在错误(大部分只有在设置blockDim.x == blockDim.y 的时候,凑巧能对齐index给出正确的结果,若这俩不等,结果就错了),这里给出一个修正的版本:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <assert.h>
#include "cuda_runtime.h"
#include "device_launch_parameters.h"#define M 32
#define K 32
#define N 32void initial(float *array, int size)
{for (int i = 0; i < size; i++){array[i] = (float)(1);}
}void printMatrix(float *array, int row, int col)
{float *p = array;for (int y = 0; y < row; y++){for (int x = 0; x < col; x++){printf("%.2f ", p[x]);}p = p + col;printf("\n");}return;
}__global__ void multiplicateMatrixOnDevice(float *array_A, float *array_B, float *array_C, int M_p, int K_p, int N_p)
{int ix = threadIdx.x + blockDim.x*blockIdx.x;//row numberint iy = threadIdx.y + blockDim.y*blockIdx.y;//col numberif (ix < N_p && iy < M_p){float sum = 0;for (int k = 0; k < K_p; k++){sum += array_A[iy*K_p + k] * array_B[k*N_p + ix];}array_C[iy*N_p + ix] = sum;}
}// Compute C = A * B
//  M, K, K, N, M, N
__global__ void matrixMultiplyShared(float *A, float *B, float *C,int numARows, int numAColumns, int numBRows, int numBColumns, int numCRows, int numCColumns)
{//@@ Insert code to implement matrix multiplication here//@@ You have to use shared memory for this MP// 1. 相比网上代码,修改这里的index__shared__ float sharedM[8][16];  __shared__ float sharedN[16][8];  int bx = blockIdx.x;  int by = blockIdx.y; int tx = threadIdx.x; int ty = threadIdx.y; int row = by * blockDim.y + ty;     int col = bx * blockDim.x + tx;     float Csub = 0.0;// for (int i = 0; i < 2; ++i)     for (int i = 0; i < (int)(ceil((float)numAColumns / blockDim.x)); i++){if (i*blockDim.x + tx < numAColumns && row < numARows)sharedM[ty][tx] = A[row*numAColumns + i*blockDim.x + tx];elsesharedM[ty][tx] = 0.0;// 2. 相比网上代码,修改这里的indexif (i*blockDim.x + tx < numBRows && col < numBColumns)sharedN[tx][ty] = B[(i*blockDim.x + tx)*numBColumns + col];elsesharedN[tx][ty] = 0.0;__syncthreads();// if (blockIdx.x == 0 && blockIdx.y == 1 && threadIdx.x == 0 && threadIdx.y ==0 ) {//     printf("sharedM: \n");//     for (int i = 0; i < 8; ++i) {//         for (int j = 0; j < 16; ++j) {//             printf("%f ", sharedM[i][j]);//         }//         printf("\n");//     }//     printf("sharedN: \n");//     for (int i = 0; i < 16; ++i) {//         for (int j = 0; j < 8; ++j) {//             printf("%f ", sharedM[i][j]);//         }//         printf("\n");//     }// }for (int j = 0; j < blockDim.x; j++)// 3. 相比网上代码,修改这里的indexCsub += sharedM[ty][j] * sharedN[j][ty];__syncthreads();}if (row < numCRows && col < numCColumns)C[row*numCColumns + col] = Csub;}int main(int argc, char **argv)
{clock_t start = 0, finish = 0;float time;int Axy = M * K;int Bxy = K * N;int Cxy = M * N;float *h_A, *h_B, *hostRef, *deviceRef;h_A = (float*)malloc(Axy * sizeof(float));h_B = (float*)malloc(Bxy * sizeof(float));int nBytes = M * N * sizeof(float);hostRef = (float*)malloc(Cxy * sizeof(float));deviceRef = (float*)malloc(Cxy * sizeof(float));initial(h_A, Axy);initial(h_B, Bxy);// printMatrix(h_A, M, K);float *d_A, *d_B, *d_C;cudaMalloc((void**)&d_A, Axy * sizeof(float));cudaMalloc((void**)&d_B, Bxy * sizeof(float));cudaMalloc((void**)&d_C, Cxy * sizeof(float));cudaMemcpy(d_A, h_A, Axy * sizeof(float), cudaMemcpyHostToDevice);cudaMemcpy(d_B, h_B, Bxy * sizeof(float), cudaMemcpyHostToDevice);int dimx = 16;int dimy = 16;dim3 block(dimx, dimy);dim3 grid((M + block.x - 1) / block.x, (N + block.y - 1) / block.y);cudaEvent_t gpustart, gpustop;float elapsedTime = 0.0;cudaEventCreate(&gpustart);cudaEventCreate(&gpustop);cudaEventRecord(gpustart, 0);// multiplicateMatrixOnDevice<<<grid,block>>> (d_A, d_B, d_C, M, K, N);matrixMultiplyShared << < grid, block >> > (d_A, d_B, d_C, M, K, K, N, M, N);cudaDeviceSynchronize();cudaEventRecord(gpustop, 0);cudaEventSynchronize(gpustop);cudaEventElapsedTime(&elapsedTime, gpustart, gpustop);cudaEventDestroy(gpustart);cudaEventDestroy(gpustop);cudaMemcpy(deviceRef, d_C, Cxy * sizeof(float), cudaMemcpyDeviceToHost);printMatrix(deviceRef, M, N);return 0;
}
http://www.hkea.cn/news/197753/

相关文章:

  • 合肥大型网站如何推广普通话
  • 高端网站制作软件怎么样推广自己的店铺和产品
  • 无障碍浏览网站怎么做关键词seo排名优化推荐
  • wordpress 247seo推广系统
  • 做深圳门户网站起什么名字好泰州seo外包公司
  • 网站视频上传怎么做百度站长平台论坛
  • wordpress农业模板下载小时seo
  • 做网站语言排名2018发帖推广哪个平台好
  • 销氪crmseo入门讲解
  • 蒙阴哪有做淘宝网站的钓鱼网站制作教程
  • 网站如何做导航条下拉菜单怎么做百度网页
  • 网站开发都做什么平台推广精准客源
  • 网站建设共享ip宁波seo搜索引擎优化
  • 学校网站建设必要性搜索引擎排名
  • 哪里有做区块链网站的百度网址大全在哪里找
  • 加盟平台网站怎么做竞价托管多少钱一个月
  • wordpress 微信 代码网站关键词怎么优化排名
  • 网站推广维护考研培训班哪个机构比较好
  • 网站后台生成器人工智能培训班收费标准
  • 在线做app的网站武汉网络营销公司排名
  • 了解深圳网站页面设计潍坊百度关键词优化
  • 制作网站怎样找公司来帮做seo词条
  • 网络销售有哪些站长工具seo排名
  • 做房产中介网站怎么注册一个自己的网站
  • 天津网站设计成功柚米全网推广成功再收费
  • 建设公司网站靠谱吗企业网站设计制作
  • 电子商务学什么课程内容兰州搜索引擎优化
  • 沧州网站建设制作设计优化能打开的a站
  • 石家庄网站建设推广报价怎么让百度快速收录网站
  • 建设局网站上开工日期选不了制作网站需要多少费用