Improve Performance
文章平均质量分 83
CUDA、OpenCL、TBB等并行手段或工具介绍与使用
元气少女缘结神
不疯魔,不成活,奋斗吧!
展开
-
Nvidia-OpenCL-SDK-Code-Samples的学习[3]
接下来就是 MultiGPU 和 OpenGLInterop 但这两个工程先跳过。因为我电脑里只有一个显卡,然后与OpenGL交互暂时用不到。所以接下来就是OpenCL Scan这个工程了,乍一看感觉和之前的都很不一样啊,感觉很难的样子。cl文件:// Scan codelets/////////////////////////////////////////////////////原创 2017-05-24 18:01:50 · 1672 阅读 · 1 评论 -
AMD-SDK的学习[3]--BasicDebug
一、BasicDebugmain:#include #include #include #include #include #include #include #define SUCCESS 0#define FAILURE 1#define EXPECTED_FAILURE 2#define GlobalThreadSize 256#define Group原创 2017-10-23 11:05:06 · 367 阅读 · 0 评论 -
AMD-SDK的学习[2]--AtomicCounters
第二个例子:AtomicCounters:我依旧是改成了自己习惯看的样子main:#include #include #include #include "a_needed_headers/SDKCommon.hpp"#include "n_needed_headers/oclUtils.h"using namespace std;#define GROUP_SIZE 256原创 2017-10-20 16:31:25 · 435 阅读 · 0 评论 -
膨胀腐蚀-OpenCL加速及kernel变成二进制文件
讨论后自己写了一个腐蚀膨胀,开操作:int myopen(Mat bwsrc, Mat &dstimg2, int kernelwidth = 2){ int comparerows = bwsrc.rows; int comparecols = bwsrc.cols; //do erode... Mat dstimg(bwsrc.size(), CV_8UC1, Scalar(0)原创 2017-08-21 16:32:16 · 1859 阅读 · 1 评论 -
AMD-SDK的学习[1]--AdvancedConvolution
我打开AMD-APP-SDK3.0里的例子,我以为可以直接运行,结果不行。就比如这第一个例子:AdvancedConvolution 里需要amdsdk但根本没有相关的头文件和库。后来终于找到了:然后将这个工程照着例子改成这样,我习惯这样看:#include #include "SDKBitMap.hpp"#include "FilterCoeff.h"using namespace原创 2017-09-07 15:54:48 · 813 阅读 · 1 评论 -
AMD-SDK的学习[5]--BitonicSort
这是双调排序的并行算法,依旧将BitonicSort.cpp改成了我习惯看的样子:但我没找到fillRandom这个给input初始化的函数,所以就换了一个给它初始化:#include #include #include #include #include #include #include "n_needed_headers/oclUtils.h"#include "a_nee原创 2017-10-27 13:40:48 · 550 阅读 · 1 评论 -
AMD-SDK的学习[4]--BinomialOption
我本来改好之后运行,竟然发现GPU结果与CPU结果不对,然后发现是从GPU返回host时的map语句出错了:sdk的这个例子中是:cl_uint* outMapPtr = (cl_uint*) clEnqueueMapBuffer(commandQueue,outBuffer,CL_FALSE,CL_MAP_READ,0,samplesPerVectorWidth * sizeof(cl_floa原创 2017-10-25 15:12:19 · 442 阅读 · 0 评论 -
OpenCL的学习---矩阵转置问题及用FreeImage保存灰度图
对灰度图像矩阵转置:图像宽1080 高720kernel:__kernel void transposeMatrix(__global uchar* srcimgdata,__global uchar* dstimgdata,int width,int height){ int id=get_global_id(0); for(int i=id;i<width*height;原创 2017-04-19 17:02:34 · 1879 阅读 · 0 评论 -
Nvidia-OpenCL-SDK-Code-Samples的学习[1]
本来针对上几篇,以为自己已经可以写一些OpenCL程序了。但就是不知道怎么优化达到最快,怎么合理分配device上的资源使程序最优,于是请教大神,大神说先看完OpenCL-SDK再说!于是我开始看。下载地址 https://developer.nvidia.com/opencl 下载对应版本 我的是linux。下载好后,我是按照 http://developer.download.nvidia原创 2017-05-02 16:48:17 · 2623 阅读 · 0 评论 -
multi-kernels、ALLOC与USE、Zero-Copy
linux中,当一个cl文件中有多个kernels,第二个kernel接受第一个kernel的结果作为自己的参数:__kernel void vector_add(__global const int *A,__global const int *B,__global int *C){ int i=get_global_id(0); C[i]=A[i]+B[i];}__kernel原创 2017-08-02 15:45:26 · 810 阅读 · 0 评论 -
Linux编译OpenCV3.2.0-OCL模块并使用
之前老板已经编译好了OpenCV3.2.0 ,但是好像无法使用ocl模块?所以我想应该是他当初编译的时候没有选择WITH_OPENCL,所以我决定重新编译一遍。一、下载CMmake并安装1、我下载的是CMake3.4.0并安装完毕(教程网上有太多 就不重复);但我运行./configure时出现:解决办法:yum install ncurses-devel 如果下载不了,就原创 2017-10-12 09:52:30 · 2571 阅读 · 7 评论 -
Linux+AMD+OpenCL配置&start-project&开启关闭X-server
换了AMD的显卡:一、下载对应驱动并安装 https://support.amd.com/zh-cn/download 结果我选好了型号没反应?二、下载APP-SDK https://pan.baidu.com/share/link?shareid=463196839&uk=1094854304&errno=0&errmsg=Auth%20Login%原创 2017-08-29 16:12:03 · 4646 阅读 · 0 评论 -
GPU上并行编程建议
显卡上并行编程规范l GPU硬件特性n 存储层次u Global memory:l 大小一般为几GBl chip-off的DRAM介质存储器l 访问速度慢(是shared memory的上百倍)l 对于是否对齐和连续访问敏感(由DRAM的性质决定)l 可以被所有的线程访问u Shared memory:l 每个SM中一般几十KBl chip-on的SRAM介质存储器转载 2017-05-25 18:26:51 · 4008 阅读 · 0 评论 -
Nvidia-OpenCL-SDK-Code-Samples的学习[4]
这个工程是Matrix Transpose:以为是我之前看过的那个,结果不是,更高级:#define BLOCK_DIM 16// This kernel is optimized to ensure all global reads and writes are coalesced,// and to avoid bank conflicts in shared memory. Thi原创 2017-05-26 10:14:04 · 1015 阅读 · 0 评论 -
访存没有合并?Linux下使用CodeXL?
对于之前写过的腐蚀膨胀加上一个小功能,或者直接单独看这个小功能也行。其实很简单,但我可能写得还不多,所以中间出过很多小问题,终于解决了。初步正确的版本是这样写的:int main(){ char front[100]; char back[100]; cl_uint platformNum; cl_int status; status=cl原创 2017-09-13 20:27:37 · 1097 阅读 · 0 评论 -
Nvidia-SDK-Code-Sample的学习[5]OverLap、一次乌龙
Oerlap即边计算边传输,会节约时间。例子是:// OpenCL Kernel Function Naive Implementation for hyptenuse__kernel void VectorHypot(__global float4* fg4A, __global float4* fg4B, __global float4* fg4Hypot, unsigned int u原创 2017-08-08 10:04:26 · 843 阅读 · 2 评论 -
OpenCL的学习
环境:CentOS7 显卡:NVIDIA 按照http://blog.csdn.net/fly_yr/article/details/49796649配置好OpenCL 然后按照:https://docs.google.com/document/pub?id=1NPo1TK30IOYZxI53t_V3uenSHTMSFYs5cupVDniqVK4 运行这个小例子测试是否配置好了 本来我原创 2017-03-15 15:23:04 · 7191 阅读 · 8 评论 -
Intel核显--OpenCL环境--Linux
Machine :Intel Xeon i7 6700(core) + Intel HD Graphics 530(skyLake) +Linux (CentOS 7.2或7.3,我的7.3)+eclipse(Neon)安装OpenCL环境,希望安装成功后将Intel i7 6700作为host,HD Graphics 530作为device。搞了半天,才知道Linux下 HD Graphic原创 2018-01-23 14:44:46 · 14043 阅读 · 20 评论 -
VPU?APU?GPU?折腾从AMD-GPU回到Intel核显+OpenCL+Linux环境搭建
大神说:也就是说APU比较适合计算部分少,但传输耗时多的情况;而GPU相反。原创 2017-12-04 16:04:02 · 4027 阅读 · 2 评论 -
AMD-SDK的学习[6]---BlackScholes与BlackScholesDP
这个是关于什么期货公式的,因为我看了下没有什么依赖性,的确可以改成并行。AMD还真是兴趣广泛,无论是学术上的知识还是商业上的公式都搜罗来写成OpenCL形式,不错。依旧改成我习惯看的形式:#include #include #include #include #include #include #include "n_needed_headers/oclUtils.h"#in原创 2017-11-03 15:09:32 · 530 阅读 · 0 评论 -
计算图形中心
#include#include#include#include#includeusing namespace cv;using namespace std;int CenterPoint(Mat src, Point center){ if (!src.data) { cout << "no image!" << endl; return -1; } vect原创 2017-10-26 10:39:38 · 1395 阅读 · 1 评论 -
新电脑Linux-64bit安装OpenCL环境Nvidia
公司换了新电脑,又安装一次OpenCL环境:1,命令:lspci |grep VGA查看显卡型号 结果显示是NVIDIA显卡:GeForce GTX 750 Ti 然后再https://developer.nvidia.com/cuda-gpus 查到我要下5.0的显卡驱动才行 所以去http://www.nvidia.cn/Download/index.aspx?la原创 2017-08-22 11:08:08 · 5051 阅读 · 4 评论 -
clCreateBuffer的7种方式的异同、MapBuffer与clCreateBuffer某些方式的区别与联系
我想彻底搞清楚:这9个词语的区别与联系,以前我以为我懂了,但发现并没有达到真正的毫不迟疑的那种懂!虽然我看过那些pdf官方文档给出的各自的定义 :但我觉得这种没我自己按自己的话理解得好,就比如按这个英文文档,我看完这几个定义 会仍旧不知道image.data 到底该用CL_MEM_USE_HOST_PTR还是用ALLOC_HOST_PTR,所以我是不喜欢按这个来真正去记的。这个pd原创 2017-09-30 17:45:40 · 3709 阅读 · 9 评论 -
Nvidia-OpenCL-SDK-Code-Samples的学习[2]
首先纠正一个错误,之前看过的例子里clBuildProgram()倒数第三个option传的NULL,但大神说不要这样,大神说当没有时要用" ",绝对不要用NULL!另外看到即使创建一个CL_MEM_WRITE_ONLY的buffer,虽然在执行kernel时会被写进结果,但在此之前建议最好通过clEnqueueWriteBuffer()将那个buffer先初始化。这个例子里竟然对CL_MEM原创 2017-05-11 20:03:09 · 1244 阅读 · 2 评论 -
Intel核显+host多线程+OpenCL问题
之前Intel核显配置那篇时说过一个例子:以前用AMD 560显卡时:CPU版本耗时约19s,OpenCL版本耗时约4.5s (单线程多线程均如此);我将这个例子直接移到(并没有改动)现在用的Intel skylake核显上:CPU版本耗时约17.3s(单线程多线程均是如此),单线程的OpenCL版本耗时约5s,但多线程的OpenCL版本竟然要38s~40s(但每个线程的结果有时会有数据异常,也就...原创 2018-04-17 16:15:36 · 1532 阅读 · 2 评论 -
OpenCL的学习---计算直方图的理解
看到《OpenCL编程指南》第14章---计算直方图,有点难理解,我对内存中抽象的东西。所以kernel函数那里看了很久。感谢北邮的大神http://www.mrobotit.cn/~shanxinyan 他很懂OpenCL,我们学校和中南湖大我没听到有搞OpenCL的人,甚至网上也少,所以学习讨论较困难。书上的不能在我电脑上直接运行 我修改了kernel的几个地方:amd24以及read_i原创 2017-04-14 14:24:26 · 6539 阅读 · 13 评论 -
Intel TBB的学习&动态并行
学习的书籍是《Pro TBB--c++ programming with TBB》原创 2021-08-17 18:28:28 · 1922 阅读 · 6 评论 -
读取大型稀疏矩阵&KNN算法的OpenCL加速版本
一、先以一个简单的稀疏矩阵为例,读进这个稀疏矩阵即这个稀疏矩阵本来其实有4行12列。前面第1列0不用管,是不要的。#include //#include #include #include #include using namespace std;using namespace cv;void main(){ int width = 12, height = 4; f原创 2017-06-14 09:37:07 · 1444 阅读 · 2 评论 -
OpenCV-OpenCL只是一个美丽传说?
之前不是没有测试过OpenCV-OpenCL,为此当时还去看过OpenCV3.x的源码,看到了那些写好的kernel;看到OpenCV的API都会有一个选择,只要dstimg是UMat型就会启动OpenCL版本的API,如果是Mat,则启动普通的CPU版本的OpenCV-API。但之前的测试效果就不理想,OpenCL版本的API比纯OpenCV的慢很多,我一直以为是有的函数不适合改成并行,现在想来原创 2017-11-23 17:03:01 · 4258 阅读 · 13 评论 -
linux下MPI、XGBoost
OpenCV3.2自带的SVM不支持多线程,http://pisvm.sourceforge.net/installation.html 这个piSVM好像支持。一、安装MPI按照这个教程,先检查是否安装了MPI,我的电脑里没有按照,于是先下载MPI : http://www.mpich.org/downloads/ 然后按照http://www.linuxidc.com/Linux/201...原创 2017-06-28 16:02:26 · 2724 阅读 · 3 评论 -
cv Graph API带来的巨大加速比
看完这里:Introduction to OpenCV Graph API (G-API) — OpenVINO™ documentationGraph API · opencv/opencv Wiki · GitHubOpenCV: Porting anisotropic image segmentation on G-API然后看到博文阅读密码验证 - 博客园这里展示的巨大性能,跟着试了下:未使用之前:cv time : 99.501 ms!cv time : ...原创 2021-12-16 11:23:40 · 2656 阅读 · 2 评论 -
编译支持TBB的opencv4.1.0、4.5.2及TBB的使用
环境:ubuntu16.04 + gcc 5.4.0 + Cmake 4.4 +opencv4.1.0首先我命令行安装了tbb的包:apt-get install libtbb-dev然后原创 2021-05-08 18:45:53 · 5331 阅读 · 7 评论 -
兼容问题“PNG12_0“ not found and libIlmImf.so与Nsight eclipse下的profile问题
问题出现在我用ubuntu20.04上使用opencv3.4.1,其实ubuntu16.04+opencv3.4.1没问题以及ubuntu20.04+opencv4.4.0都没问题。但因某些原因要ubuntu20.04+opencv3.4.1,而opencv3.4.1需要的是PNG12,但自从ubuntu16.04后其他的ubuntu都已经丢弃了png12:经过重重尝试:1,download libpng12-0_1.2.54-1ubuntu1.1_amd64.deb by yourself原创 2020-11-18 09:18:32 · 1801 阅读 · 0 评论 -
难理解的bank conflict
之前看Nvidia-OpenCL-SDK里有一个例子讲到过bank conflict,但没怎么明白,它选择的是用奇数来避免。大神也叫我记住这一点就好了。但还是自己想弄明白,今天看了:http://blog.csdn.net/lucky_greenegg/article/details/9992129 http://blog.csdn.net/qqlu_did/article/details/原创 2017-10-24 10:17:03 · 5794 阅读 · 11 评论 -
CUDA Occupancy Calculator占用率计算与显卡算力计算
我的显卡是RTX 2060 super,其计算能力是7.5。最近发现CUDA提供了自动计算占用率的计算器即CUDA Occupancy Calculator,官网自行下载即可。我下载下来后,阅读完说明,设置了下图紫色圈中的几个数值。开始想了很久,不知道为何占用率给出竟然是63%,现在已明白,记录在此。首先,不要忽略绿色圈中的那几个设备特性,我原来一直不知道这几个对占用率有何影响。1、然后占用率公式大家都知道:每个SM中活跃线程束的数量/每个SM中最大的线程束的数量。可以看到我的设备每个S原创 2020-09-29 17:14:24 · 4111 阅读 · 3 评论 -
python调用cuda核函数问题记录
配置教程网上一大堆,此处不说了。程序是网上下载的,import pycuda.compiler as nvccimport pycuda.gpuarray as gpuimport pycuda.driver as cuimport pycuda.autoinitfrom sys import argvfrom ws_utils import *# Read and compile CUDA kernels.print "Compiling CUDA kernels..."kerne原创 2020-09-09 09:31:22 · 2249 阅读 · 1 评论 -
基于细胞自动机Cellular Automata(CA)的区域生长
本来没想研究这个,但NvidiaNPP的《NVIDIA 2D Image And Signal Performance Primitives》这个模块的NPP Image Processing部分的Filtering Functions中的computer vision部分有连通域标记以及分水岭分割现成的函数,其中官网介绍这个分水岭分割是基于论文《Effiffifficient 2D and 3D Watershed on Graphics Processing Unit: Block-Asynchron.原创 2020-07-07 12:52:21 · 902 阅读 · 6 评论 -
cv::cuda与CUDA的NPP库、距离变换和分水岭并行版本尝试
因为不想什么函数都自己写设备核函数,看到opencv有对应的cuda版本的函数比如滤波,然而CUDA的NPP库也提供了对应的滤波函数,我不知道哪个性能更高(当然肯定要比纯CPU版本快,但我没测试过)一、cv::cuda#include <stdio.h>#include <opencv2\core\core.hpp>#include <opencv2\core\cuda.hpp>#include <opencv2\imgproc.hpp>#i原创 2020-05-22 16:09:03 · 2847 阅读 · 10 评论 -
cmake+opencv4.1+opencv_contrib4.1+CUDA以及CUDA11.x的NPP新模块watershedSegmentation
一、环境配置1、网上很多教程都有,安装合适自己电脑的CUDA,我已安装完毕2、CMake编译opencv4.1+opencv_contrib4.1+CUDA,网上依旧很多教程。我前几次编译时,遇到外网下载、下载超时原因报错很多,但后来按照网上的办法自己线下到报错的网址下载后放到对应报错文件夹下,就解决了。中途我自己下载了这些文件:现在cmake第一次configure后,只有下...原创 2020-04-23 16:44:50 · 5621 阅读 · 3 评论