日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[笔记] GPGPU-SIM的使用说明(一)

發布時間:2023/12/14 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [笔记] GPGPU-SIM的使用说明(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文來自魏繼增科學網博客:鏈接地址:http://blog.sciencenet.cn/blog-1067211-726653.html?

3.1 Simulation Modes

? ?默認情況下,大多數的使用者使用GPGPU-Sim 3.x評估GPU運行一個應用所需要的時鐘周期數。這就是性能仿真模型。當嘗試在GPGPU-Sim上運行一個新的應用,則有可能該應用的運行結果不正確,即可能產生錯誤的數據。為了幫助調試應用,GPGPU-Sim 3.x還支持快速的功能仿真。GPGPU-Sim 3.x還支持在NVIDIA GPU上執行本地硬件ISA,通過一種擴展的PTX語法,稱為PTXPlus。下面各小節將依次介紹這些特征。

?

3.1.1 Performance Simulation

? ?性能仿真是仿真器默認的仿真模式,它能夠收集各種性能參數,但仿真速度較慢。GPGPU-Sim仿真在Microarchitecture Model一節中描述的微架構。

? ?為了選擇性能仿真模式,在gpgpusim.config文件中添加如下所示的語句:

-gpgpu_ptx_sim_mode 0

關于仿真的輸出的更多信息參見“understanding simulationoutput”小節。

?

3.1.2Pure Functional Simulation

純功能仿真比性能仿真的仿真速度更快,但是它僅能夠執行CUDA/OpenCL程序,不能夠收集任何性能統計信息。

為了選擇純功能仿真模式,在gpgpusim.config文件中添加如下所示的語句:

??-gpgpu_ptx_sim_mode1

作為另一種選擇,你可以設置環境變量PTX_SIM_MODE_FUNC為“1”。然后就可以利用性能仿真模式執行程序了。

僅僅仿真一個GPU設備的功能,GPGPU-Sim純功能仿真模式執行CUDA/OpenCL程序就好像他們運行在一個真實的GPU設備上,所以在這種模式里不會收集任何性能統計信息,僅僅一個GPU程序的常規輸出被顯示。純功能仿真模式比性能仿真快很多(大約快5~10倍)。

這個模式非常有用,假如你想快速的驗證你的代碼在GPGPU-Sim上是否工作正確,或者假如你想在沒有真正的GPU計算設備的情況下增加CUDA/OpenCL的編程經驗。純功能仿真和性能仿真一樣,對于PTXPlus支持同樣版本的CUDA(CUDA v3.1和V2.3)。純功能仿真以warp為單位執行程序,每個Cooperative Thread Array(CTA)中的warp執行直到所有都執行完畢或者等待在一個barrier處,對于后一種情況,一旦所有的warp等待在barrier,他們被清理并跨越barrier繼續執行。

?

3.1.3Interactive Debugger Mode

? ?交互式調試模式提供一個類似GDB的接口對GPGPU-Sim中的功能行為進行調試。然后,當前它只能工作在性能仿真模式下。

? ?為了使用交互調試模式,設置環境變量GPGPUSIM_DEBUG為“1”。其所支持的命令如下所示:

Command

Description

dp ?<id>

顯示流水線:顯示編號為<id>的SIMT核心的流水線中的內容

q

退出

b ?<file>:<line> <thread uid>

對于線程id為<uid>的線程,在<file>:<line>處設置斷點

d ?<uid>

刪除斷點

s

對于所有的核心單步執行到下一個core cycle

c

采用非單步方式繼續執行下去

w ?<address>

在地址<address>設置監測點(watchpoint)

l

在當前斷點列出PTX指令

h

顯示幫助信息

?

? ?調試功能的實現在文件debug.h和debug.cc中。

?

3.1.4Cuobjdump Support

? ?在當前的GPGPU-Sim 3.1.0版本中,對于cuobjdump的使用支持被添加。Cuobjdump是一個由NVIDIA提供的軟件,它能夠從二進制文件中抽取SASS和PTX信息。GPGPU-Sim支持使用cuobjdump抽取它運行SASS或PTX所需要的信息,以替代從cubin文件中獲取這些信息。使用cuobjdump僅支持CUDA 4.0。Cuobjdump默認是打開的,假如仿真器是在CUDA 4.0下被編譯的。為了打開/關閉cuobjdump,可以在你的配置文件中添加如下配置信息:

? ?# disable cuobjdump

-gpgpu_ptx_use_cuobjdump 0

# enable cuobjdump

-gpgpu_ptx_use_cuobjdump 1

?

3.1.5PTX vs. PTXPlus

默認情況下,GPGPU-Sim 3.x仿真PTX指令。然而,當在一個實際的GPU上執行時,PTX被重新編譯為本地的GPU ISA(SASS)。這個重編譯并不能用正常的PTX指令進行解釋。為了解決這個問題,我們創建了PTXPlus。PTXPlus是GPGPU-Sim 3.x引入的一種PTX擴展模式,它從GT200 SASS指令到PTXPlus指令的1對1映射。它引入了在PTX中不存在的新指令和尋址模式。當轉化到PTXPlus設置被激活,構成程序的SASS指令被轉化為PTXPlus指令,然后可在GPGPU-Sim上進行仿真。使用PTXPlus轉化設置可以得到更加精確仿真結果。然而,到PTXPlus的轉化并不支持所有可以通過PTX進行仿真的程序。當前,僅高于4.0的CUDA Toolkit支持到PTXPlus的轉化。

為了從可執行文件轉化為SASS,GPGPU-Sim cuobjdump,一個NVIDIA CUDA toolkit提供的軟件可以從CUDA可執行文件中抽取PTX,SASS和其他的信息。GPGPU-Sim 3.x包含一個單機程序,叫做cuobjdump_to_ptxplus,被調用將cuobjdump的輸出轉化為GPGPU-Sim可以仿真的PTXPlus。cuobjdump_to_ptxplus是一個C++程序。一個關于PTXPlus轉化過程的詳細描述請參見“PTXPlus Conversion”一節。當前,cuobjdump_to_ptxplus支持SASS的轉化對于sm版本<sm_20。

為了打開PTXPlus仿真,在gpgpusim.config文件中添加如下所示的語句:

-gpgpu_ptx_convert_to_ptxplus 1

被轉化的PTXPlus可以保存在名為“"_#NaNxplus”的文件中,在gpgpusim.config文件中添加如下所示的語句:

-gpgpu_ptx_save_converted_ptxplus 1

如果想關掉任何一個中設置,可以刪除相應的行或將值從“1”改為“0”。更多關于PTXPlus的細節可以參照“PTXPlus support”一節。如果上述的設置都是打開的,GPGPU-Sim試圖將SASS代碼轉化為PTXPlus,然后運行PTXPlus。然而,如上所述,并不是所有的程序都支持這種模式。

?

3.3Configuration Options

? ?配置參數被傳入GPGPU-Sim通過gpgpusim.config和一個互連網絡配置文件(通過在gpgpusim.config中設置-inter_config_file)。GPGPU-Sim 3.0.2中的configs文件夾內包含了NVIDIA GT200(configs/QuadroFX5800/)和Fermi架構(configs/Fermi/)的配置文件。

? ?所有的配置參數如下列表所示:

Simulation Run Configuration

Option

Description

-gpgpu_max_cycle <# cycles>

經過了<# cycles>個cycle后,終止GPGPU-Sim仿真(0=no limit)

-gpgpu_max_insn <# insns>

經過了<# insns>個指令后,終止GPGPU-Sim仿真(0=no limit)

-gpgpu_ptx_sim_mode ?<0=performance (default), 1=functional>

選擇性能仿真模型或功能仿真模型

-gpgpu_deadlock_detect <0=off, ?1=on (default)>

在死鎖的時候停止仿真

-gpgpu_max_cta

可以在GPU上并發運行的cta數目(0=no limit)

-gpgpu_max_concurrent_kernel

可以在GPU上并發運行的最大的kernel數目

Statistics Collection ?Options

Option

Description

-gpgpu_ptx_instruction_classification ?<0=off, 1=on (default)>

打開指令分類

-gpgpu_runtime_stat ?<frequency>:<flag>

顯示運行時統計信息

-gpgpu_memlatency_stat

收集存儲器延遲統計信息(0x2 enables MC, 0x4 ?enables queue logs)

-visualizer_enabled <0=off, 1=on ?(default)>

打開visualizer輸出(使用AerialVision可視化工具畫出log文件中保存的數據曲線)

-visualizer_outputfile ?<filename>

為visualizer指定輸出文件

-visualizer_zlevel <compression ?level>

Visualizer輸出log文件的壓縮級別(0=no compression, 9=max ?compression)

-save_embedded_ptx

將二進制文件中的PTX保存為<n>NaNx

-enable_ptx_file_line_stats ?<0=off, 1=on (default)>

打開PTX源文件統計剖析功能

-ptx_line_stats_filename <output ?file name>

指定PTX源文件統計剖析信息的輸出文件

-gpgpu_warpdistro_shader

指定某個shader core收集warp size的分布情況

-gpgpu_cflog_interval

控制流記錄器(logger)中每個快照(snopshot)的間隔

-keep

保存GPGPU-Sim產生的中間文件

High-Level Architecture Configuration (See ISPASS ?paper for more details on what is being modeled)

Option

Description

-gpgpu_n_mem <# memory ?controller>

DRAM控制器(DRAM通道)的數目。在進行這個設置前,請先閱讀“#Topology Configuration”小節

-gpgpu_clock_domains <Core ?Clock>:<Interconnect Clock>:<L2 Clock>:<DRAM Clock>

設置4個時鐘域

-gpgpu_n_clusters

設置核心簇的數目

-gpgpu_n_cores_per_cluster

設置每個核心簇中SIMD核心的數目

Additional Architecture ?Configuration

Option

Description

-gpgpu_n_cluster_ejection_buffer_size

Ejection buffer中包的數目

-gpgpu_n_ldst_response_buffer_size

LD/ST單元ejection buffer中響應包的數目

-gpgpu_coalesce_arch

合并架構(default = 13, anything else is off for now)

Scheduler

Option

Description

-gpgpu_num_sched_per_core

每個核心warp調度器的數目

-gpgpu_max_insn_issue_per_warp

每個cycle內每個warp所能發射的最大指令數

Shader Core Pipeline Configuration

Option

Description

-gpgpu_shader_core_pipeline <# ?thread/shader core>:<warp size>:<pipeline SIMD width>

Shader核心的流水線設置

-gpgpu_shader_registers <# ?registers/shader core, default=8192>

每個shader核心的最大寄存器數目,被并發的CTA數目所限制

-gpgpu_shader_cta <# CTA/shader ?core, default=8>

每個shader核心中能夠并發的cta數目

-gpgpu_simd_model <1=immediate ?post-dominator, others are not supported for now> ? ? ? ? ?

SIMD分支分叉的處理策略

Memory Sub-System ?Configuration

Option

Description

-gpgpu_perfect_mem <0=off ?(default), 1=on>

開啟完美存儲器模式(不發生cache miss并且存儲器延遲為“0”)

-gpgpu_tex_cache:l1 ?<nsets>:<bsize>:<assoc>:<rep>:<wr>:<alloc>,<mshr>:<N>:<merge>,<mq>

紋理Cache配置。Evict policy: L = LRU, F = FIFO, R = Random

-gpgpu_const_cache:l1 ?<nsets>:<bsize>:<assoc>:<rep>:<wr>:<alloc>,<mshr>:<N>:<merge>,<mq>

常量Cache配置。Evict policy: L = LRU, F = FIFO, R = Random

-gpgpu_cache:il1 ?<nsets>:<bsize>:<assoc>:<rep>:<wr>:<alloc>,<mshr>:<N>:<merge>,<mq>

L1指令Cache配置。Evict policy: L = LRU, F = FIFO, R = Random

-gpgpu_cache:dl1 ?<nsets>:<bsize>:<assoc>:<rep>:<wr>:<alloc>,<mshr>:<N>:<merge>,<mq> ?-- set to "none" for no DL1 --

L1數據Cache配置。Evict policy: L = LRU, F = FIFO, R = Random

-gpgpu_cache:dl2 ?<nsets>:<bsize>:<assoc>:<rep>:<wr>:<alloc>,<mshr>:<N>:<merge>,<mq>

統一的分bank的L2 Cache的配置。它指明了一個Memory Partion中L2 Cache bank的配置。L2 Cache的總容量?= <nsets> x <bsize> x <assoc> x ?<# memory controller>

-gpgpu_shmem_size <shared memory ?size, default=16kB>

每個shader核心中共享memory的大小

-gpgpu_shmem_warp_parts

對于共享memory bank沖突檢測,warp被劃分的數目。

-gpgpu_flush_cache <0=off ?(default), 1=on>

在每個kernel調用的結束階段Flush Cache

-gpgpu_local_mem_map

從本地memory存儲空間地址到GPU仿真的物理空間地址的映射(默認為開啟)

-gpgpu_num_reg_banks

寄存器堆的bank數目

-gpgpu_reg_bank_use_warp_id

將寄存器映射為bank時使用warp id(默認為關閉)

-gpgpu_cache:dl2_texture_only

L2 Cache僅用于紋理(0=no, 1=yes, default=1)

Operand Collector Configuration

Option

Description

-gpgpu_operand_collector_num_units_sp

Collector ?unit的數目。(默認?= 4)

-gpgpu_operand_collector_num_units_sfu

Collector ?unit的數目。(默認?= 4)

-gpgpu_operand_collector_num_units_mem

Collector ?unit的數目。(默認?= 2)

-gpgpu_operand_collector_num_units_gen

Collector ?unit的數目。(默認?= 0)

-gpgpu_operand_collector_num_in_ports_sp

Collector ?unit輸入端口的數目(默認?= 1)

-gpgpu_operand_collector_num_in_ports_sfu

Collector ?unit輸入端口的數目(默認?= 1)

-gpgpu_operand_collector_num_in_ports_mem

Collector ?unit輸入端口的數目(默認?= 1)

-gpgpu_operand_collector_num_in_ports_gen

Collector unit輸入端口的數目(默認?= 0)

-gpgpu_operand_collector_num_out_ports_sp

Collector unit輸出端口的數目(默認?= 1)

-gpgpu_operand_collector_num_out_ports_sfu

Collector unit輸出端口的數目(默認?= 1)

-gpgpu_operand_collector_num_out_ports_mem

Collector unit輸出端口的數目(默認?= 1)

-gpgpu_operand_collector_num_out_ports_gen

Collector unit輸出端口的數目(默認?= 0)

DRAM/Memory Controller ?Configuration

Option

Description

-gpgpu_dram_scheduler <0 = fifo, ?1 = fr-fcfs>

DRAM調度器的類型

-gpgpu_dram_sched_queue_size <# ?entries>

DRAM調度對列的大小(0 = unlimited (default); ?# entries per chip)

-gpgpu_dram_buswidth?<# bytes/DRAM bus ?cycle, default=4 bytes, i.e. 8 bytes/command clock cycle>

在command總線頻率下一個DRAM芯片的總線帶寬(default = 4 bytes (8 bytes ?per command clock cycle))。每個MC的DRAM芯片數目由-gpgpu_n_mem_per_ctrlr選項確定。每個memory partition有(gpgpu_dram_buswidth X ?gpgpu_n_mem_per_ctrlr)位DRAM數據pin腳。例如,Quadro FX5800有512位DRAM數據總線,被劃分為8個memory partition。每個memory partition有一個512/8 = 64bit數據總線。64位總線被劃分為兩個DRAM芯片。每個芯片有32位?= 4字節DRAM總線寬度。因此設置-gpgpu_dram_buswidth為“4”。

-gpgpu_dram_timing_opt ?<nbk:tCCD:tRRD:tRCD:tRAS:tRP:tRC:CL:WL:tWTR>

DRAM時序參數

-gpgpu_mem_address_mask <address ?decoding scheme>

選擇不同的地址譯碼策略對不同的memory bank進行訪問。(0 = old addressing mask, 1 = new addressing mask, 2 = ?new add. mask + flipped bank sel and chip sel bits)

-gpgpu_mem_addr_mapping dramid@<start ?bit>;<memory address map>

將存儲地址映射到DRAM模型:

l??<start bit> =?用來指定DRAM通道ID的起始bit位(這意味著下Log2(#DRAM channel)bit位被用來作為DRAM通道ID,整個的地址映射被轉換取決于有多少bit位被使用)

l??<memory address ?map> =?一個64個字符的字符串指名存儲器地址中每一位是如何被映射為行(R),列(C),bank(B)地址的。部分處于DRAM突發中的地址應該用(S)指名

-gpgpu_n_mem_per_ctrlr <# DRAM ?chips/memory controller>

每個MC中DRAM芯片的數量(即DRAM通道)

-gpgpu_dram_partition_queues

i2::2d:d2::2i

-rop_latency <# minimum cycle ?before L2 cache access>

指定最小的延遲(以核心的時鐘周期為單位)從一個存儲請求到達memory partition到它訪問L2 Cache/進入DRAM訪問隊列。它建模了最小的L2 Cache命中延遲。

-dram_latency <# minimum cycle ?after L2 cache access and before DRAM access>

指定最小的延遲(以核心的時鐘周期為單位)從一個存儲請求訪問L2 Cache到它被送入DRAM調度器。這個設置和-rop_latency一起建模最小的DRAM訪問延遲(= rop_latency + ?dram_latency)。

Interconnection ?Configuration

Option

Description

-inter_config_file <Path to ?Interconnection Config file>

這個文件包含了互連網絡仿真器的設置

-network_mode

互連網絡模型(默認?= 1)

PTX Configurations

Option

Description

-gpgpu_ptx_use_cuobjdump

使用cuobjdump抽取ptx/sass (0=no, 1=yes)?僅對CUDA 4.0有效。

-gpgpu_ptx_convert_to_ptxplus

將嵌入的ptx轉化為ptxplus (0=no, 1=yes)

-gpgpu_ptx_save_converted_ptxplus

將轉化的ptxplus保存到文件(0=no, 1=yes)

-gpgpu_ptx_force_max_capability

強迫使用最大計算能力?(默認為“0”)

-gpgpu_ptx_inst_debug_to_file

將執行指令的調試信息dump到文件(0=no, 1=yes)

-gpgpu_ptx_inst_debug_file

指定調試信息的輸出文件

-gpgpu_ptx_inst_debug_thread_uid

指令調試信息的線程id UID

?

3.3.1Interconnection Configuration

? ?GPGPU-Sim 3.x使用booksim router simulator建?;ミB網絡??梢詤⒖糱ooksim文檔配置互連網絡。然而,下面我們列出一些特殊的考慮需要被重視以確定你的修改可以和GPGPU-Sim一起工作。

?

3.3.1.1Topology Configuration

? ?注意,在互連網絡配置文件中指定的網絡節點總數目必須與GPGPU-Sim中的總節點數目相匹配。GPGPU-Sim的節點數目為SIMT核心簇數目與MC數目之和。如,QuadroFX5800配置中有10個SIMT核心簇和8個MC。因此一共有18個節點。因此,互連網絡配置文件中也有18個節點,如下所示:

? ?topology = fly;

? ?k = 18;

? ?n = 1;

routing_function = dest_tag;

以上這個配置片斷設置了一個一階的蝶形互連網絡,具有destination tag routing和18個節點。通常,蝶形和網狀互連網絡的網絡節點總數應當是k*n。

注意,如果選擇使用網狀互連網絡,你需要考慮配置MC的放置。在當前版本中,有一些預定義映射,可以通過設置“use_map=1;”開啟。特別是ISPASS 2009文章中使用的網狀互連網絡可以通過這個進行設置,拓撲結構為:

l??a 6x6 mesh network(topology=mesh, k=6, n=2) : 28 SIMT cores + 8 dram channels assuming the SIMTcore Cluster size is one

? ?你可以創建自己的映射通過修改interconnect_interface.cpp中的create_node_map(),并設置use_map=1。

?

3.3.1.2Booksim options added by GPGPU-Sim

?

3.3.1.3Booksim Options ignored by GPGPU-Sim

? ?注意,下面booksim中配置選項要么被忽略或者保持默認狀態不變。

l??Traffic Options:injection_rate,injection_process, burst_alpha, burst_beta, "const_flit_per_packet",traffic

l??Simulation parameters:sim_type, sample_period,warmup_periods, max_samples, latency_thres, sim_count, reorder

?



?

總結

以上是生活随笔為你收集整理的[笔记] GPGPU-SIM的使用说明(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。