主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

GPUベースのLDPC復号化器系统对象を使用したDVB-S。2システムシミュレーション

この例では,GPUベースのLDPC復号化器系统对象™を使用して通信システムシミュレーションを高速化する方法を示します。パフォーマンスの向上は,ブロードキャスティング,双方向サービス,ニュースギャザリングおよびその他のブロードバンド衛星活用(DVB-S.2)のためのETSI(欧州電気通信標準化機構)EN 302 307規格の一部をモデル化することで示されます[1.DVB-S。2システムのシミュレートで系统对象を使用する場合の詳細については,DVB-S.2リンク (Simulink での LDPC 符号化を含む)を参照してください。GPUベースのLDPC復号化器を使用するには,并行计算工具箱™のユーザーライセンスが必要です。

はじめに

LDPC復号化アルゴリズムは計算に時間がかかり,DVB-S。2シミュレーションで費やされる大部分を占めます.comm.gpu。LDPCDecoder系统对象を使用してGPUで復号化アルゴリズムを実行すると,シミュレーションの実行時間が著しく短縮されます。この例では、CPUベースのLDPC復号化器(comm.LDPCDecoder)とGPUベースのLDPC復号化器(comm.gpu.LDPCDecoder1)をそれぞれ度使用し,DVB-S。2システムをシミュレートして速度(実行時間)のベンチマークを得ます。また,GPUを使用する場合の復号化の性能に低下がないことを示すために,両方のバージョンのビット誤り率を求めます。

流(...“DVB-S.2数字视频广播标准误码率仿真\n\n');
DVB-S.2数字视频广播标准误码率仿真
流(...CPU加速解码器和GPU加速解码器的性能比较);
CPU加速解码器与GPU加速解码器的性能比较。

GPU存在検知

この例では,GPUを照会して,并行计算工具箱のユーザーライセンスとサポート対象GPUの存在を検出します。GPUまたは并行计算工具箱が使用不可能な場合は,CPUのみのシミュレーションを実行できます。

试一试%查询图形处理器dev = parallel.gpu.GPUDevice.current;打印找到的图形处理器的信息流(...'检测到GPU (%s, %d多处理器,计算能力%s)\n'...dev.Name、dev.MultiprocessorCount dev.ComputeCapability);%包含一个基于gpu的模拟。doGPU = true;% #好< CTCH >% GPU不支持或不存在,或并行计金宝app算%Toolbox不存在且未获得许可。考虑一个只使用cpu的模拟。输入=输入([“***注意:未检测到GPU。”...“继续只用cpu进行模拟?”[Y] / N '],“年代”);如果strcmpi (inp,“y”) || is空(inp) doGPU = false;其他的返回结束结束
检测到GPU (Quadro P620, 4个多处理器,计算能力6.1)

初期化

関数getParamsDVBS2Demo.mは,以下のパラメーターが指定されているDVB-S。2システムのコンフィギュレーション情報を保持する構造体dvbを生成します。続いて,dvb構造体に基づき,系统对象の作成と構成を行います。

createSimObjDVBS2Demo.mスクリプトはDVB-S。2システムで使用される大部分の系统对象を構築し,dvb構造体に基づいて系统对象を構成します。

次に、CPUベースのLDPC復号化器系统对象とGPUベースのLDPC復号化器系统对象の両方を,完全に等しく作成して構成します。

% DVB-S.2系统参数subsystemType =“QPSK 1/2”星座和LDPC码率EsNodB = 0.75;每符号的能量与噪声PSD比,单位为dBnumFrames = 10;%要模拟的帧数maxNumLDPCIterations = 50;% LDPC解码器迭代dvb = getParamsDVBS2Demo (subsystemType EsNodB maxNumLDPCIterations);%创建和配置BCH编码器和解码器,调制器,解调器,% AWGN信道。createSimObjDVBS2Demo;%构造LDPC编码器encldpc = comm.LDPCEncoder (dvb.LDPCParityCheckMatrix);%构造LDPC解码器系统对象LDPC解码器配置ldpcPropertyValuePairs = {...“MaximumIterationCount”, dvb。LDPCNumIterations,...“ParityCheckMatrix”, dvb。LDPCParityCheckMatrix,...“DecisionMethod”“艰难的决定”...“IterationTerminationCondition”“最大迭代数”...“OutputValue”“信息部分”};构建LDPC解码器系统对象(CPU和GPU版本)decldpc = comm.LDPCDecoder (ldpcPropertyValuePairs {:});如果doGPU gpuLDPCDecoder = comm.gpu.LDPCDecoder(ldpcPropertyValuePairs{:});结束%创建ErrorRate对象,分析误码率的差异CPU与GPU之间的百分比。数量= comm.ErrorRate;

CPUとGPUの性能比較

この例では,最初にCPUベースのLDPC復号化器系统对象を使用し,次にGPUベースのLDPC復号化器系统对象を使用してDVB-S。2システムをシミュレートします。システムからいくつかのデータフレームを渡してシステムの総シミュレーション時間を測定し,LDPC復号化器ごとのシステムベンチマークを得ます。最初のデータフレームはシミュレーション初期化時間が長くかかるため,ベンチマークの計算から除外されます。フレームごとおよび平均のシステムシミュレーション時間はコマンドウィンドウに表示されます。システムのビット誤り率(BER)もコマンドウィンドウに表示され,CPUベースとGPUベースの両方のLDPC復号化器で同じ误码率が実現されることが示されます。

如果doGPU架构= 2;其他的架构= 1;结束初始化运行时结果向量运行时= 0(架构、numFrames);avgtime = 0(1、架构);% Seed用于通道和消息的随机数生成器%的创造。这将允许CPU和GPU之间公平的误码率比较。%缓存原始随机流以便稍后恢复。original_rs = RandStream.getGlobalStream;rs = RandStream.create (“mrg32k3a”“种子”25);RandStream.setGlobalStream (rs);%循环每个处理单元- CPU和GPU2 = 1:架构为执行循环做一些初始设置如果(ii == 1“CPU”;解码器= decldpc;%使用CPU LDPC解码器其他的拱=“图形”;解码器= gpuLDPCDecoder;%使用GPU LDPC解码器结束%重置错误率对象重置(BER);重置随机流重置(rs);%通知用户DVB-S。模拟开始。流([“\新加坡国立大学”“基于LDPC译码器:\ n”]);德尔= repmat (“\ b”流(“初始化……”));%主模拟循环。运行numFrames+1次并忽略第一个%帧(具有初始化开销)%计算。使用第一次运行进行误码率计算。rr = 1:(numFrames + 1)%开始计时ts =抽搐;% ***创建输入消息*** %味精= 0 (encbch。MessageLength, 1);味精(1:dvb.NumInfoBitsPerCodeword) =...逻辑(randi ([0 1] dvb.NumInfoBitsPerCodeword 1));% * * *发送* * * %bchencOut = encbch(味精);ldpcencOut = encldpc (bchencOut);xlvrOut = intrlv (ldpcencOut dvb.InterleaveOrder);modOut = pskModulator (xlvrOut);*** *噪音*** %陈chanOut = (modOut);% * * *获得* * * %demodOut = pskDemodulator (chanOut);dexlvrOut = deintrlv (demodOut dvb.InterleaveOrder);%使用上面设置的LDPC解码器。ldpcdecOut =解码器(dexlvrOut);bchdecOut = decbch (ldpcdecOut);% ***计算误码率*** %计算LDPC输出的误码率,而不是BCH。数量=误码率(逻辑(bchencOut), ldpcdecOut);%停止计时器Runtime (ii, rr) = toc(ts);%不报告带有初始化开销的第一帧。如果(rr > 1) fprintf(dels);newCharsToDelete =流('帧%d解码:%。2 f交会”...rr-1,运行时(ii, rr));德尔= repmat (“\ b”1、newCharsToDelete);结束结束%结束通过DVB-S运行一帧。2系统。将运行时结果报告到命令窗口。流(del);删除打印出来的最后一行。%计算平均运行时间。不包括坐标系1,因为它%包含一些系统对象初始化时间。avgtime (ii) =意味着(运行时(ii, 2:结束));流(' %d帧解码,%。2 f秒/框架\ n '、numFrames avgtime (ii));流('误码率:%g \n'ber (1));结束%建筑环
基于cpu的LDPC译码器:
初始化…
第一帧解码:0.17秒第二帧解码:0.17秒第三帧解码:0.17秒4帧解码:0.19秒5帧解码:0.15秒6帧解码:0.17秒7帧解码:0.15秒8帧解码:0.17秒9帧解码:0.18秒10帧解码:0.15秒
10帧解码,0.17秒/帧
误码率:0.00785634
基于gpu的LDPC解码器:
初始化…
第一帧解码:0.14秒第二帧解码:0.13秒第三帧解码:0.13秒4帧解码:0.14秒5帧解码:0.11秒6帧解码:0.13秒7帧解码:0.12秒8帧解码:0.14秒9帧解码:0.13秒10帧解码:0.12秒
10帧解码,0.13秒/帧
误码率:0.00785634
将随机流重置为缓存对象RandStream.setGlobalStream (original_rs);

前述のコードと類似したコードを使用してビット誤り率の測定がオフラインで行われました。GPUおよびCPUベースのLDPC復号化器のビット誤り率性能は,このプロットで確認できるように等しくなります。

まとめ

GPUを使用した場合,GPU LDPC復号化器では,CPU LDPC復号化器を使用するDVB-S。2システムに比べ平均的な実行時間に応じた高速化が示されました。

如果~ doGPU流('\n*** GPU不存在***\n ');其他的%计算系统加速流(['\nFull系统模拟运行%。使用'快2f倍...基于gpu的LDPC解码器。\n\n'), avgtime (1) / avgtime (2));结束
使用基于gpu的LDPC解码器的全系统仿真运行速度快1.32倍。

付録

この例では,createSimObjDVBS2Demo.mスクリプトと補助関数getParamsDVBS2Demo.mが使用されています。

参考文献

  1. 标准EN 302 307 V1.1.1:数字视频广播(DVB);第二代帧结构,用于广播、交互服务、新采集和其他宽带卫星应用的信道编码和调制系统(DVB-S.2),欧洲电信标准协会,瓦邦,法国,2005-03