1. 程式人生 > >OpenCL的多GPU和多核CPU異構計算--1

OpenCL的多GPU和多核CPU異構計算--1

原作者:飛鴻驚雪 地址點選開啟連結

本文主要探究OpenCL的GPU和多核CPU的異構計算問題,主要簡要闡述了什麼是OpenCL異構計算,講述CPU和GPU各自的特點,並且把他們結合起來做異構計算的前景。然後具體講述在高效能實驗室Linux工作站上如何搭建多GPU和多核CPU異構OpenCL環境。最後用實驗驗證了所安裝的OpenCL異構計算環境能夠正常工作,說明什麼是OpenCL的多GPU與多核CPU異構環境的platform,device等。

1 何為OpenCL異構計算

        OpenCL不僅僅是一種計算機語言,更是一個非常好的API,它可以使得開發者很容易的開發出跨平臺的GPU計算程式,充分利用GPU強大的計算能力然後應用在各種領域。同時OpenCL對於異構運算的支援也開始明朗化。


圖1 OpenCL標準所提倡的CPU-GPU異構計算

        我們知道CPU和GPU各有所長,一般而言CPU擅長處理不規則資料結構和不可預測的存取模式,以及遞迴演算法、分支密集型程式碼和單執行緒程式。這類程式任務擁有複雜的指令排程、迴圈、分支、邏輯判斷以及執行等步驟。例如,作業系統、文書處理、互動性應用的除錯、通用計算、系統控制和虛擬化技術等系統軟體和通用應用程式等等。而GPU擅於處理規則資料結構和可預測存取模式。例如,光影處理、3D 座標變換、油氣勘探、金融分析、醫療成像、有限元、基因分析和地理資訊系統以及科學計算等方面的應用。


圖2 AMD GPU在OpenCL下的儲存體系

        儘管在不少方面GPU表現優異,但在一段時間內,還會維持CPU與GPU各自發展的態勢,它們可以繼續在各自擅長的領域發揮作用,而未來的演進方向是相互取長補短,走向融合,而OpenCL正是它們融合與並行發展的連線橋樑。從CPU角度來講,為了提高處理能力,以前是多執行緒,目前是多核,將來的發展方向是眾核。
OpenCL的標準很大程度上決定了它的未來。獲得整個計算機/視訊硬體行業的支援也將起到幫助作用。從獨立軟體開發商的角度來看,OpenCL是通向混合(GPU/CPU)計算的大門。任何涉足高效能運算領域的人都會告訴你,在非標準的API上投入資金和時間是一項具有風險的業務,而OpenCL顯然具備更大的潛力。



圖3 ATI StreamOpen CL下程式設計模型

        CPU正向不斷增加吞吐量和提高能效性的方向發展;而從GPU角度來講,其可程式設計效能本來是在晶片內部固化的程式,然後發展到區域性可程式設計,最後是完全可程式設計。也就是說,GPU是在提高所處理的吞吐量的同時,向通用處理的方向發展。


2 Linux工作站下搭建OpenCL環境

        高效能實驗室,已經在兩臺工作站上配置了LinuxOpenCL環境。

其中的硬體和作業系統等配置如下:

高效能實驗室workstation-1:

1 Redhat Linux 6.1 64位作業系統
2 64位AMD 6核處理器,32G記憶體,500G硬碟,雙顯示卡
3 顯示卡1:華碩HD 6870:AMD的GPU晶片ATI Radeon HD 6870
4 顯示卡2:NVIDIA Quadro FX 4800

高效能實驗室workstation-2:


1. Arch Linux 64位作業系統
2. 64位AMD 6核處理器,32G記憶體,500G硬碟,雙顯示卡
3. 顯示卡1:NVIDIA Quadro FX 4800
4. 顯示卡2:NVIDIA Quadro FX 4800

        總的來說GPU顯示卡的環境配置主要步驟是先裝顯示卡驅動,再裝OpenCL SDK;而AMD CPU的環境配置只要直接安裝AMD OpenCL SDK就行了,像workstation-1中,已經為顯示卡安裝了AMD OpenCL SDK因此可以直接使用CPU;而像workstation-2如果打算在多核CPU上執行程式,則也要在安裝一個AMD OpenCL SDKAMDCPU提供OpenCL環境。具體環境的配置如下。

2.1 RedHat Linux 6.1工作環境搭建

        首先在Linux文字模式下安裝ATI顯示卡驅動,再在圖形介面下安裝AMD OpenCL SDK

2.1.1 安裝ATI顯示卡驅動

華碩HD 6870顯示卡的GPU晶片為ATI Radeon HD 6870,到AMD主頁上下載最新的顯示卡驅動,這裡是ati-driver-installer-8.85.7.2-x86.x86_64.run。
安裝驅動

進入Linux下的文字命令列模式(也即啟動方式為3),root根使用者下執行命令:

  1. ./ati-driver-installer-8.85.7.2-x86.x86_64.run   
直到顯示卡驅動成功,會出現如下顯示:
  1. Created directory fglrx-install.0PFT89  
  2. Verifying archive integrity... All good.  
  3. Uncompressing ATI Catalyst(TM) Proprietary Driver-8.911  
  4. ......................................................................................................  
  5. ==================================================================  
  6. ATI Technologies Catalyst(TM) Proprietary Driver Installer/Packager   
  7. ==================================================================  
  8. Detected configuration:  
  9. Architecture: i686 (32-bit)  
  10. X Server: X.Org 6.9 or later  
配置驅動程式,執行下面的命令
  1. aticonfig --initial  
沒有輸出錯誤資訊,說明安裝正常。

重新設為X Window模式(即為啟動方式5),重啟,下面安裝AMD OpenCL SDK。

2.1.2 安裝AMD OpenCL SDK

下載64位AMD OpenCL SDK軟體AMD-APP-SDK-v2.5-RC2-lnx64.tgz
解壓原始AMD openCL SDK包

  1. su  
  2. mkdir SDK-install  
  3. cd SDK-install  
  4. cp AMD-APP-SDK-v2.5-lnx64.tgz ./  
  5. tar -xvzf AMD-APP-SDK-v2.5-lnx64.tgz  
  6. rm AMD-APP-SDK-v2.5-lnx64.tgz  
執行自動安裝sh
  1. ./ Install-APP.sh  
重啟機器
  1. reboot  
執行測試程式,啟用OpenCL環境
  1. cd /opt/AMDAPP/samples  
  2. make  
編譯正常,沒有出錯!

按理說不需要這一步,因為樣例程式可以不編譯測試,但是不知為何這個opencl不編譯樣例程式就不能正常執行,必須要編譯,搞不懂。

到samples/opencl/bin/x86_64下執行編譯好的樣例程式

  1. cd opencl/bin/x86_64  
  2. ./FFT  

執行正常沒有出錯!
注意:必須到OpenCl安裝目錄make編譯一遍,不然OpenCL環境沒被啟用,不能使用。

2.2 Arch Linux工作環境搭建

該工作站中,有兩個NVIDIA的顯示卡,還有一個AMD的多核CPU,因此安裝步驟主要是以下三步:

        第一 安裝NVIDIA顯示卡驅動;

        第二 安裝NVIDIAOpenCL SDK--NVIDIAGPU使用;

        第三 安裝AMDOpenCL SDK--AMD多核CPU使用;

具體的安裝步驟和2.1節中形似,這裡不多冗述。

相關推薦

OpenCLGPUCPU計算--1

原作者:飛鴻驚雪 地址點選開啟連結 本文主要探究OpenCL的GPU和多核CPU的異構計算問題,主要簡要闡述了什麼是OpenCL異構計算,講述CPU和GPU各自的特點,並且把他們結合起來做異構計算的前景。然後具體講述在高效能實驗室Linux工作站上如何搭建多GPU和多核

OpenCLGPUCPU計算--2

        本文主要探究OpenCL的GPU和多核CPU的異構計算問題,主要簡要闡述了什麼是OpenCL異構計算,講述CPU和GPU各自的特點,並且把他們結合起來做異構計算的前景。然後具體講述在高

Zabbix通過SNMP監控CPU使用率時, 計算CPU平均使用率

mes ces zabb ext 觸發器 trend times http sso 環境:沒有Agent,只能通過SNMP監控時,需要獲取多核CPU的平均使用率。 ZABBIX的使用SNMP監控CPU使用率時,由於設備都是多核CPU,監控的都是單獨某一核心的使用率,但單獨某

處理器&類UNIX系統 -> 之程序執行緒效能比較

網路上有很多討論關於在*NIX系統在SMP環境下到底是應該用多執行緒還是多程序, 到底哪一個有更好的效能,  比如有很多人認為考慮到linux使用1-1執行緒模型(對核心來說, 執行緒就是一個程序)並且系統已經為程序處理做了很多優化,效率提升, 所以在liunx SMP環

深入理解 CPU 計算晶片 GPU/FPGA/ASIC

王玉偉,騰訊TEG架構平臺部平臺開發中心基礎研發組,組長為專家工程師Austingao,專注於為資料中心提供高效的異構加速雲解決方案。目前,FPGA已在騰訊海量圖片處理以及檢測領域已規模上線。 隨著網際網路使用者的快速增長,資料體量的急劇膨脹,資料中心對計算的需求也

Python態性

meta 更改 www. html TP nbsp 不變 spa 自己的 引用於:http://www.cnblogs.com/linhaifeng/articles/7340687.html Python中多態是指一類事物有多種形態。比如動物有多種形態,人,狗,貓,等等。

JDBC上關於資料庫中表操作一對關係關係的實現方法--轉

  原文地址---- https://www.cnblogs.com/pangguoming/p/7028322.html 黑馬程式設計師 我們知道,在設計一個Java bean的時候,要把這些BEAN 的資料存放在資料庫中的表結構,然而這些資料庫中的表直接又有些特殊

程序執行緒的優缺點

在Linux下程式設計多用多程序程式設計少用多執行緒程式設計。          IBM有個傢伙做了個測試,發現切換執行緒context的時候,windows比linux快一倍多。進出最快的鎖(windows2k的

關於程序,執行緒,程序執行緒的網路程式設計

程序執行緒網路 多工程式設計 : 可以有效的利用計算機資源,同時執行多個任務 程序 : 程序就是程式在計算機中一次執行的過程 程序和程式的區別: 程式是一個靜態檔案的描述,不佔計算機的系統資源 程序是一個動態的過程,佔有cpu記憶體等資源,有一定的生命週期 * 同一個程式的不同執行過程即為不同的程序

#程式設計師得痔瘡凳子都不敢坐,難受!網友:熬夜吃辣椒

程式設計師這類人群正趕上了網際網路時代的熱潮,雖然工作確實比起其他行業來說可能要辛苦,加班時間多,但是就薪資高這條就可以讓很多人蜂擁而入,畢竟很多人的想法就是出來工作不就是為了賺錢嗎。但是長時間加班,坐在電腦面前肯定會有一些問題,其中一個就是痔瘡的困擾。 有想學習java的程式設計師,可來我

Python之——Python中的程序執行緒

轉載請註明出處:https://blog.csdn.net/l1028386804/article/details/83042246 一、多程序 Python實現對程序的方式主要有兩種,一種方法是使用os模組中的fork方法,另一種方法是使用multiprocessing模組。區別在於:

Linux程序執行緒的優缺點

教科書上最經典的一句話是“程序是作業系統分配的最小單位,執行緒是CPU排程的最小單位”。 多執行緒的優點: 1)它是一種非常”節儉”的多工操作方式。在Linux系統下,啟動一個新的程序必須分配給它獨立的地址空間,建立眾多的資料表來維護它的程式碼段、堆疊段和資料段,這是一種”昂貴”

CPU+GPU計算程式設計簡介

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

尺度解析度的區別

本文轉載自https://blog.csdn.net/chgm_456d/article/details/8100513 我一開始以為  多尺度與多解析度  是一樣的意思。後來看到了xiaowei_cqu部落格的一篇文章“【OpenCV】SIFT原理與原始

linux程序執行緒

轉載自CodeUniverse的部落格 程序:可執行程式是儲存在磁碟裝置上的由程式碼和資料按某種格式組織的靜態實體,而程序是可被排程的程式碼的動態執行。 在Linux系統中,每個程序都有各自的生命週期。在一個程序的生命週期中,都有各自的執行環境以及所需的資源,這些資訊都記錄在各自的程序控制塊中,以便系統對

程序執行緒簡單tcp聊天程式

如果需要一個服務端可以連線多個客戶端,並同時與多個(不超多listen第二個引數及最大同時併發數)客戶端通訊,可以利用多程序即建立子程序,子程序來完成服務端的接受和傳送資料;也可以建立多個執行緒。對於tcp一些介面具體使用可以檢視這篇部落格:https://bl

Thinkphp資料模型一對關聯關聯

HAS_MANY 關聯表示當前模型擁有多個子物件,例如每個使用者有多篇文章,我們可以這樣來定義 'Article' => array(     'mapping_type'  => self::HAS_MANY,     'class_name'    =>

python中的程序執行緒

作者:liuyazhuang  來源:CSDN  原文:https://blog.csdn.net/l1028386804/article/details/83042246?utm_source=copy  轉載出處:https://blog.csdn.net/l102838

程序執行緒學習

關於多程序和多執行緒,教科書上最經典的一句話是“程序是資源分配的最小單位,執行緒是CPU排程的最小單位”,這句話應付考試基本上夠了,但如果在工作中遇到類似的選擇問題,那就沒有這麼簡單了,選的不好,會讓你深受其害。 經常在網路上看到有的XDJM問“多程序好還是多執

網路程式設計實驗四——利用程序執行緒實現伺服器端的併發處理

一、實驗目的 1.在TCP檔案傳輸程式碼的基礎上,利用多程序實現伺服器端的併發處理。  2.利用多執行緒實現伺服器端的併發處理。 二、實驗原理 併發的面向連線伺服器演算法: 主1、建立套接字並將其繫結到所提供服務的熟知地址上。讓該套接字保持為無連線的。 主2、將