【高性能计算】opencl安装及相关概念
目录
- 从异构计算讲起
- opencl安装的相关说明
- 查看linux系统cpu及gpu型号方法
- 安装opencl
- helloword程序运行
从异构计算讲起
异构计算是一种利用多种不同类型的计算资源来协同解决计算问题的方法。它的核心思想是将不同特性和能力的计算设备(例如CPU、GPU、FPGA等)组合在一起,以充分发挥它们在不同类型的工作负载和任务中的优势。
传统的计算模型通常依赖于单一类型的处理器,如中央处理器(CPU)。然而,CPU在处理一些并行、高计算密集度的任务时可能效率较低。与此相反,图形处理器(GPU)通常对并行计算和图形处理具有出色的性能。现代计算资源种类繁多,每种资源都具有独特的优势和特性。通过将这些异构计算资源组合在一起,可以实现更高效、更灵活的计算。
在异构计算中,任务可以根据其特性和需求进行分类,并分配给最适合执行该任务的计算资源。例如,一些串行的、控制流程较强的任务可以由CPU执行,而一些需要大规模并行处理的任务可以由GPU执行。通过合理分配和利用计算资源,可以实现更高的计算性能和效率。
异构计算也可以用于优化能源效率。由于不同类型的计算设备在功耗和性能方面的差异,可以根据任务的要求将计算负载分配到最节能的设备上,以提高能源利用效率。
在实践中,异构计算需要合适的编程模型和工具来管理和调度不同类型的计算资源。例如,OpenCL和CUDA是广泛使用的异构计算编程框架,它们提供了丰富的API和工具来实现跨不同设备和计算资源的并行计算。
总而言之,异构计算利用不同类型的计算资源的特点和优势,通过合理分配和协同使用这些资源,实现更高的计算性能、能源效率和灵活性。它在许多领域,如科学计算、机器学习、图形渲染等都得到了广泛的应用。
opencl安装的相关说明
在使用OpenCL时,您有两种选择:
使用默认的OpenCL运行时和驱动程序:许多操作系统都内置了默认的OpenCL运行时和驱动程序,您可以直接使用这些默认的运行时和驱动程序来编译和运行OpenCL应用程序。在这种情况下,您不需要额外的SDK。
安装特定硬件厂商提供的OpenCL SDK:如果您的系统不提供默认的OpenCL运行时和驱动程序,或者您希望使用特定硬件厂商提供的最新版本运行时和驱动程序,那么可以安装相应厂商提供的OpenCL SDK。这些SDK通常包含供开发人员使用的库、头文件、示例代码和调试工具。
无论您选择使用哪种方式,都可以使用相应的OpenCL库和头文件来编写和编译OpenCL应用程序。当您编译和链接OpenCL应用程序时,编译器会在系统中查找OpenCL运行时和驱动程序,并将其与应用程序进行连接。
OpenCL是一个开放的跨平台标准,旨在提供一种统一的编程模型,以便将并行计算任务在各种不同的计算设备上进行执行,包括CPU、GPU、DSP、FPGA等。
OpenCL的设计使得开发人员可以编写一次代码,并在支持OpenCL的不同平台上运行,而不需要对每个平台编写特定的代码。这种可移植性使得OpenCL成为许多异构系统、超级计算机和嵌入式系统中的首选并行编程模型。
虽然特定硬件厂商提供的OpenCL SDK可能包含额外的工具和优化,但OpenCL的核心标准和函数接口是跨平台的,并且可以在没有特定SDK的情况下进行开发和编译。因此,您可以在不同平台上使用相同的OpenCL代码,只需使用适当的OpenCL运行时和驱动程序即可。
查看linux系统cpu及gpu型号方法
查看cpu:
lscpu
查看gpu:
先安装相关软件包:
sudo apt-get install pciutils
再列出详细的显卡信息:
lspci | grep -i vga
安装opencl
查看是否已安装opencl:
clinfo
如没有:
sudo apt-get install intel-opencl-icd
如失败,手动安装:
根据intel cpu的相关型号:
https://www.intel.com/content/www/us/en/developer/tools/opencl-sdk/choose-download.html?wapkw=Intel%C2%AE%20SDK%20for%20OpenCL%E2%84%A2%20Applications
安装依赖:
sudo apt-get install cpio
安装:
sudo tar xvf /work/intel_sdk_for_opencl_applications_2020.3.494.tar.gz
sudo /work/intel_sdk_for_opencl_applications_2020.3.494/install.sh
按照指令安装完成。
通过下列命令,可看到安装效果:
find / -name libOpenCL.so
helloword程序运行
对应cmakelist:
cmake_minimum_required(VERSION 3.5)
project(fangdou)FIND_PACKAGE(OpenMP REQUIRED)
if(OPENMP_FOUND)
message("OPENMP FOUND")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
endif()include_directories(${BW_SUB_LIB_ROOT_DIR}/include
/opt/intel/system_studio_2020/opencl/SDK/include
)SET(OpenCV_DIR /usr/local/lib/cmake/opencv4/)
FIND_PACKAGE(OpenCV REQUIRED)file(GLOB_RECURSE cpp_srcs ${CMAKE_SOURCE_DIR}/src/*.cpp ${CMAKE_SOURCE_DIR}/src/*.cc ${CMAKE_SOURCE_DIR}/src/*.h)link_directories(
/usr/myffmpg/lib/
/usr/lib/x86_64-linux-gnu/
)add_executable(${PROJECT_NAME} ${cpp_srcs})target_link_libraries(${PROJECT_NAME} PRIVATE ${OpenCV_LIBS} avcodec avformat avutil swscale avfilter OpenCL)
对应的cpp文件:
#include <stdio.h>
#include <stdlib.h>
#include <CL/cl.h>#define MAX_PLATFORMS 10
#define MAX_DEVICES 10int main() {cl_platform_id platforms[MAX_PLATFORMS];cl_device_id devices[MAX_DEVICES];cl_uint num_platforms, num_devices;cl_context context;cl_command_queue command_queue;cl_program program;cl_kernel kernel;cl_int ret;// 获取平台数量ret = clGetPlatformIDs(MAX_PLATFORMS, platforms, &num_platforms);if (ret != CL_SUCCESS) {printf("Failed to get platform IDs\n");return -1;}printf("Number of platforms: %u\n", num_platforms);// 遍历打印平台信息for (cl_uint i = 0; i < num_platforms; i++) {char platform_name[128];char platform_vendor[128];ret = clGetPlatformInfo(platforms[i], CL_PLATFORM_NAME, sizeof(platform_name), platform_name, NULL);if (ret != CL_SUCCESS) {printf("Failed to get platform name for platform %u\n", i);}ret = clGetPlatformInfo(platforms[i], CL_PLATFORM_VENDOR, sizeof(platform_vendor), platform_vendor, NULL);if (ret != CL_SUCCESS) {printf("Failed to get platform vendor for platform %u\n", i);}printf("Platform %u:\n", i);printf(" Name: %s\n", platform_name);printf(" Vendor: %s\n", platform_vendor);printf("\n");}// 获取设备数量ret = clGetDeviceIDs(platforms[0], CL_DEVICE_TYPE_CPU, MAX_DEVICES, devices, &num_devices);if (ret != CL_SUCCESS) {printf("Failed to get device IDs\n");return -1;}// 创建OpenCL上下文context = clCreateContext(NULL, num_devices, devices, NULL, NULL, &ret);if (ret != CL_SUCCESS) {printf("Failed to create context\n");return -1;}// 创建命令队列command_queue = clCreateCommandQueue(context, devices[0], 0, &ret);if (ret != CL_SUCCESS) {printf("Failed to create command queue\n");return -1;}// 定义和构建OpenCL内核const char *kernel_source = "__kernel void hello_world() {\n"" printf(\"Hello, World!\\n\");\n""}\n";program = clCreateProgramWithSource(context, 1, &kernel_source, NULL, &ret);if (ret != CL_SUCCESS) {printf("Failed to create program\n");return -1;}ret = clBuildProgram(program, num_devices, devices, NULL, NULL, NULL);if (ret != CL_SUCCESS) {printf("Failed to build program\n");return -1;}// 创建OpenCL内核对象kernel = clCreateKernel(program, "hello_world", &ret);if (ret != CL_SUCCESS) {printf("Failed to create kernel\n");return -1;}// 执行内核函数ret = clEnqueueTask(command_queue, kernel, 0, NULL, NULL);if (ret != CL_SUCCESS) {printf("Failed to enqueue task\n");return -1;}// 等待执行完成ret = clFinish(command_queue);if (ret != CL_SUCCESS) {printf("Failed to finish execution\n");return -1;}printf("Kernel executed successfully\n");// 清理资源ret = clReleaseKernel(kernel);ret = clReleaseProgram(program);ret = clReleaseCommandQueue(command_queue);ret = clReleaseContext(context);return 0;
}
打印内容如下:
Number of platforms: 1
Platform 0:Name: Intel(R) CPU Runtime for OpenCL(TM) ApplicationsVendor: Intel(R) CorporationHello, World!
Kernel executed successfully
相关文章:
【高性能计算】opencl安装及相关概念
目录 从异构计算讲起opencl安装的相关说明查看linux系统cpu及gpu型号方法安装opencl helloword程序运行 从异构计算讲起 异构计算是一种利用多种不同类型的计算资源来协同解决计算问题的方法。它的核心思想是将不同特性和能力的计算设备(例如CPU、GPU、FPGA等&…...

盛最多水的容器——力扣11
int maxArea(vector<int>& height) {int l=0, r=height.size()...

2023年高教社杯数学建模思路 - 复盘:校园消费行为分析
文章目录 0 赛题思路1 赛题背景2 分析目标3 数据说明4 数据预处理5 数据分析5.1 食堂就餐行为分析5.2 学生消费行为分析 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 赛题背景 校园一卡通是集…...

Flink_state 的优化与 remote_state 的探索
摘要:本文整理自 bilibili 资深开发工程师张杨,在 Flink Forward Asia 2022 核心技术专场的分享。本篇内容主要分为四个部分: 相关背景state 压缩优化Remote state 探索未来规划 点击查看原文视频 & 演讲PPT 一、相关背景 1.1 业务概况 从…...

Kdab QML (part9)自由缩放时钟
文章目录 Kdab QML (part9)自由缩放时钟代码详细解释运行截图 Kdab QML (part9)自由缩放时钟 代码 import QtQuick 2.15 import QtQuick.Window 2.15Window {id: rootwidth: 500height: 500visible: truecolor: "lightgrey"title: qsTr("Hello World")It…...

Java网络编程(二)经典案例[粘包拆包]
粘包拆包 概述 TCP是面向流的协议,TCP在网络上传输的数据就是一连串的数据,完全没有分界线。 TCP协议的底层并不了解上层业务的具体定义,它会根据TCP缓冲区的实际情况进行包的划分。 在业务层面认为一个完整的包可能会被TCP拆分成多个小包进行发送,也可能把多个小的包封装成一…...
无分布式锁的ID生成
起因 TEAM GARDEN 本来ID是自增的,后面发现自增ID比较麻烦,有问题: 不可控的间隔: 如果你在插入数据时,中途删除了一些行,导致自增的ID出现间隔,那么新插入的行会填充这些间隔,可能…...

X2000 Linux UVC
参考文档:\doc\开发使用说明\USB使用说明文档\设备\USB_UVC\xburst2\USB_UVC.pdf 一、内核添加USB UVC功能 1、确定所用dts文件 进入到/tools/iconfigtool/IConfigToolApp/路径下,执行./IConfigTool 选择config文件,查看kernel默认配置 配…...

HCIP-OpenStack组件之neutron
neutron(ovs、ovn) OVS OVS(Open vSwitch)是虚拟交换机,遵循SDN(Software Defined Network,软件定义网络)架构来管理的。 OVS介绍参考:https://mp.weixin.qq.com/s?__bizMzAwMDQyOTcwOA&mid2247485088&idx1…...
数学建模-常见算法(3)
KMP算法(Knuth-Morris-Pratt算法) KMP算法是一种用于字符串匹配的算法,它的时间复杂度为O(mn)。该算法的核心思想是在匹配失败时,利用已经匹配的信息,减少下一次匹配的起始位置。 def kmp(text, pattern): n len(…...

缓存的设计方式
问题情况: 当有大量的请求到内部系统时,若每一个请求都需要我们操作数据库,例如查询操作,那么对于那种数据基本不怎么变动的数据来说,每一次都去数据库里面查询,是很消耗我们的性能 尤其是对于在海量数据…...

CH02_重构的原则(什么是重构、为什么重构、何时重构)
什么是重构 重构(名词):对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。 重构(动词):使用一系列重构手法࿰…...
26. 删除有序数组中的重复项(简单系列)
给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量为 k ,你需要做…...

【linux】基本指令(二)【man、echo、cat、cp】
目录 一、man指令二、echo指令三、cat指令二、cp指令一些常见快捷键 一、man指令 Linux的命令有很多参数,我们不可能全记住,可以通过查看联机手册获取帮助。访问Linux手册页的命令是 man 语法: man [选项] 命令 常用选项 1.-k 根据关键字搜索联机帮助 2…...

【视频】Python用LSTM长短期记忆神经网络对不稳定降雨量时间序列进行预测分析|数据分享...
全文下载链接:http://tecdat.cn/?p23544 在本文中,长短期记忆网络——通常称为“LSTM”——是一种特殊的RNN递归神经网络,能够学习长期依赖关系(点击文末“阅读原文”获取完整代码数据)。 本文使用降雨量数据…...

2023年7月京东空气净化器行业品牌销售排行榜(京东运营数据分析)
随着科技发展,智能家具在日常生活中出现的频率越来越高,许多曾经不被关注的家电也出现在其中,包括近年来逐渐兴起的空气净化器。伴随人们对自身健康的重视度越来越高,作为能够杀灭空气污染物、有效提高空气清洁度的产品࿰…...

原生小案例:如何使用HTML5 Canvas构建画板应用程序
使用HTML5 Canvas构建绘图应用是在Web浏览器中创建交互式和动态绘图体验的绝佳方式。HTML5 Canvas元素提供了一个绘图表面,允许您操作像素并以编程方式创建各种形状和图形。本文将为您提供使用HTML5 Canvas创建绘图应用的概述和指导。此外,它还将通过解释…...

Electron 报gpu_process_host.cc(951)] GPU process launch faile错误
解决方法,在入口js文件中,添加如下代码: app.commandLine.appendSwitch(no-sandbox)...

每天一分享#读up有感#
不知道开头怎么写,想了一下,要不,就这样吧,开头也就写完 今日分享 分享一博主的分享——https://blog.csdn.net/zhangay1998/article/details/121736687 全程高能,大佬就diao,一鸣惊人、才能卓越、名扬四…...

threejs贴图系列(一)canvas贴图
threejs不仅支持各种texture的导入生成贴图,还可以利用canvas绘制图片作为贴图。这就用到了CanvasTexture,它接受一个canas对象。只要我们绘制好canvas,就可以作为贴图了。这里我们利用一张图片来实现这个效果。 基础代码: impo…...

label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
机器学习的数学基础:线性模型
线性模型 线性模型的基本形式为: f ( x ) ω T x b f\left(\boldsymbol{x}\right)\boldsymbol{\omega}^\text{T}\boldsymbol{x}b f(x)ωTxb 回归问题 利用最小二乘法,得到 ω \boldsymbol{\omega} ω和 b b b的参数估计$ \boldsymbol{\hat{\omega}}…...
如何通过git命令查看项目连接的仓库地址?
要通过 Git 命令查看项目连接的仓库地址,您可以使用以下几种方法: 1. 查看所有远程仓库地址 使用 git remote -v 命令,它会显示项目中配置的所有远程仓库及其对应的 URL: git remote -v输出示例: origin https://…...