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

ubuntu下支持wordpress汕头seo计费管理

ubuntu下支持wordpress,汕头seo计费管理,巢湖城市建设投资有限公司网站,源码网站跟自己做的网站区别作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 实现原理 atomicMax和 atomicMin是 CUDA 中的原子操作,用于在并行计算中安全地更新共享变量的最大值和最小值。它们确…

作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

实现原理

       atomicMax和 atomicMin是 CUDA 中的原子操作,用于在并行计算中安全地更新共享变量的最大值和最小值。它们确保在多线程环境中,多个线程对同一个变量的访问不会导致数据竞争。使用 atomicMax可以在一个线程中比较当前值与新值,并在新值更大时更新,而 atomicMin则是用于比较和更新最小值。这些操作对于需要从多个线程中汇总结果的应用至关重要,能够确保最终结果的准确性。

       本文将通过一个实战案例,进行atomic求最值的展示。

       (注意本文案例基于OpenCV实现,因为我工作围绕各类图像展开,这样方便些,但是对CUDA而言,核心部分与OpenCV无关,可根据自身场景和数据结构进行更改。)

C++测试代码

ImageProcessing.cuh

#pragma once
#include <cuda_runtime.h>
#include <iostream>
#include <vector>
#include <opencv2/opencv.hpp>
#include <device_launch_parameters.h>using namespace cv;
using namespace std;#define TILE_WIDTH 16// 预准备过程
void warmupCUDA();// 图像最值计算-CPU
void calcMaxMin_CPU(cv::Mat input, uchar &maxV, uchar &minV);// 图像最值计算-GPU
void calcMaxMin_GPU(cv::Mat input, uchar &maxV, uchar &minV);

ImageProcessing.cu

#include "ImageProcessing.cuh"// 预准备过程
void warmupCUDA()
{float* dummy_data;cudaMalloc((void**)&dummy_data, sizeof(float));cudaFree(dummy_data);
}// 图像最值计算-CPU
void calcMaxMin_CPU(cv::Mat input, uchar &maxV, uchar &minV)
{int row = input.rows;int col = input.cols;// 初始化最值maxV = 0;minV = 255;for (int i = 0; i < row; ++i){for (int j = 0; j < col; ++j){if (input.at<uchar>(i, j) > maxV){maxV = input.at<uchar>(i, j);}if (input.at<uchar>(i, j) < minV){minV = input.at<uchar>(i, j);}}}
}// 获取最大最小值核函数
__global__ void getMaxMinValue_CUDA(uchar* inputImage, int width, int height, int *maxV, int *minV)
{int row = blockIdx.y * blockDim.y + threadIdx.y;int col = blockIdx.x * blockDim.x + threadIdx.x;if (row < height && col < width){atomicMax(maxV, int(inputImage[row * width + col]));atomicMin(minV, int(inputImage[row * width + col]));}
}// 图像最值计算-GPU
void calcMaxMin_GPU(cv::Mat input, uchar &maxV, uchar &minV)
{int row = input.rows;int col = input.cols;// 定义计时器float spendtime = 0.0f;cudaEvent_t start, end;cudaEventCreate(&start);cudaEventCreate(&end);// 分配GPU内存	uchar* d_inputImage;cudaMalloc(&d_inputImage, row * col * sizeof(uchar));// 将输入图像数据从主机内存复制到GPU内存cudaMemcpy(d_inputImage, input.data, row * col * sizeof(uchar), cudaMemcpyHostToDevice);// 计算块和线程的大小dim3 blockSize(TILE_WIDTH, TILE_WIDTH);dim3 gridSize((col + blockSize.x - 1) / blockSize.x, (row + blockSize.y - 1) / blockSize.y);// 求最值int h_maxValue = 0;int h_minValue = 255;int *d_maxValue;int *d_minValue;cudaMalloc((void**)&d_maxValue, sizeof(int));cudaMalloc((void**)&d_minValue, sizeof(int));cudaMemcpy(d_maxValue, &h_maxValue, sizeof(int), cudaMemcpyHostToDevice);cudaMemcpy(d_minValue, &h_minValue, sizeof(int), cudaMemcpyHostToDevice);getMaxMinValue_CUDA << <gridSize, blockSize >> > (d_inputImage, col, row, d_maxValue, d_minValue);cudaMemcpy(&h_maxValue, d_maxValue, sizeof(int), cudaMemcpyDeviceToHost);cudaMemcpy(&h_minValue, d_minValue, sizeof(int), cudaMemcpyDeviceToHost);maxV = uchar(h_maxValue);minV = uchar(h_minValue);
}

main.cpp

#include "ImageProcessing.cuh"void main()
{// 预准备warmupCUDA();cout << "calcMaxMin test begin." << endl;// 加载cv::Mat src = imread("test pic/test5.jpg", 0);// 调整数据区间cv::Mat src2;cv::normalize(src, src2, 20, 230, NORM_MINMAX);// CPU版本clock_t s1, e1;s1 = clock();uchar maxV1, minV1;calcMaxMin_CPU(src2, maxV1, minV1);e1 = clock();cout << "CPU time:" << double(e1 - s1) << "ms" << endl;cout << "maxV1:" << int(maxV1) << endl;cout << "minV1:" << int(minV1) << endl;// GPU版本clock_t s2, e2;s2 = clock();uchar maxV2, minV2;calcMaxMin_GPU(src2, maxV2, minV2);e2 = clock();cout << "GPU time:" << double(e2 - s2) << "ms" << endl;cout << "maxV2:" << int(maxV2) << endl;cout << "minV2:" << int(minV2) << endl;cout << "calcMaxMin test end." << endl;}

测试效果 

       在本文案例中,我通过归一化函数将图像的最值设为20和230,所以验证功能是否正确,只需要判断下函数执行完输出的最值是不是20和230即可。速度方面,CUDA也是很快的,我原以为这种简单计算CPU会更有优势。

       该功能相对简单,但也很常用。后续我会写一篇关于归一化的CUDA文章,归一化中很重要的一部分就是确认最值。

       如果函数有什么可以改进完善的地方,非常欢迎大家指出,一同进步何乐而不为呢~

       如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!

http://www.mmbaike.com/news/65148.html

相关文章:

  • 苏州做网站外包的公司营销软件网站
  • 小程序开发平台要多少钱搜索引擎优化网页
  • 网站优化排名易下拉霸屏aso安卓优化公司
  • 专做网站郑州做网站推广哪家好
  • 网站建设的主要内容百度推广渠道
  • 东莞网络关键词排名怎么做优化关键词
  • 提供微网站制作电话谷歌推广公司哪家好
  • 十堰高端网站建设厦门谷歌seo公司
  • dw简单网页制作代码南昌seo服务
  • 招商网站建设公司百度推广客户端
  • wordpress 增加注册页面韶山百度seo
  • 网站开发软件怎么做越秀seo搜索引擎优化
  • 用css把网站切片进行还原青岛百度快速优化排名
  • 公司推广网站怎么做青岛seo优化公司
  • 做购物网站公司贵阳百度快照优化排名
  • 免费的行情网站app软件大全网站seo诊断
  • wordpress标题图片网站优化排名怎么做
  • 域名备案掉了网站还可以用友情链接查询结果
  • 做铜字接单网站怎么买域名自己做网站
  • 没有网站可以做seo排名吗seo案例分析100例
  • 提供郑州网站建设苏州网络推广服务
  • 跨境独立站有哪些在线智能识图
  • 商城网站开发价格重庆seo软件
  • 网站seo视频中文网站排行榜
  • 腾博会的网站是什么网络营销师课程
  • web网站开发的设计思想网络广告营销方案策划内容
  • 北京网站开发网站建设优化网站怎么做
  • wordpress 底部备案号游戏行业seo整站优化
  • 网站建设功能seoseo点击排名
  • 教你做吃的网站广告软文外链平台