FC2カウンター FPGAの部屋 SDSoC 2015.2 でハードウェアとソフトウェアのラプラシアンフィルタの性能を比較した5(ハードウェア化2)

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

SDSoC 2015.2 でハードウェアとソフトウェアのラプラシアンフィルタの性能を比較した5(ハードウェア化2)

SDSoC 2015.2 でハードウェアとソフトウェアのラプラシアンフィルタの性能を比較した4(ハードウェア化)”の続き。

前回はハードウェア化したほうが遅いという結果が出たが、今回はmalloc() をすべて sds_alloc() に、free() を sds_free() にして、性能を測ってみた。こうすると物理メモリが連続的に取得され、ハードウェアに有利になるはずだ。
SDSoC_93_150808.png

D:\SDSoC\Examples\ZYBO\lap_filter2\SDRelease\_sds\reports フォルダの data_motion.html を見ると、すべてシンプルDMAだった。
SDSoC_94_150808.png

D:\SDSoC\Examples\ZYBO\lap_filter2\SDRelease\_sds\p0\ipi に zybo.xpr つまりVivado のプロジェクトがあるので、開いてみた。
zybo ブロックデザインを開いてみた。
SDSoC_95_150808.png
やはり、DMAがSGモードになっていない。

Summary を見てみた。FFが多い。
SDSoC_96_150808.png

Address Editor を示す。
SDSoC_97_150808.png

D:\SDSoC\Examples\ZYBO\lap_filter2\SDRelease\_sds\vhls\lap_filter_axim には、Vivado HLS 2015.2 のプロジェクトがあった。
これをVivado HLS 2015.2 で開いた。
SDSoC_98_150808.png

ソースを見ると、私が書いた laplacian_filter2.c がそのままソースファイルとして登録されている。これじゃ、BRAMを使うのはあたりまえだ。これを何とか、直接、DDR3 SDRAMへアクセスが行くようにしたい。
SDSoC_99_150808.png

D:\SDSoC\Examples\ZYBO\lap_filter2\SDRelease\sd_card の内容をSDカードに書いて、ZYBOで試してみた。
./lap_filter2.elf を実行したところ、ハードウェアのラプラシアンフィルタ処理時間は 503 us 、ソフトウェアのラプラシアンフィルタ処理時間は安定しない。最低は 600 us で、最高は、14.1 ms程度だった。
SDSoC_100_150808.png

最後にSDSoC で生成されたLinux の起動メッセージを貼っておく。なお、一部省略してある。

U-Boot 2014.07-00005-gd2f850a (Jan 27 2015 - 13:33:33)

Board:  Xilinx Zynq
I2C:   ready
DRAM:  ECC disabled 512 MiB
MMC:   zynq_sdhci: 0
SF: Detected S25FL128S_64K with page size 256 Bytes, erase size 64 KiB, total 16 MiB
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
Net:   Gem.e000b000
Hit any key to stop autoboot:  0
Device: zynq_sdhci
Manufacturer ID: 74
OEM: 4a45
Name: USD
Tran Speed: 50000000
Rd Block Len: 512
SD version 3.0
High Capacity: Yes
Capacity: 7.5 GiB
Bus Width: 4-bit
reading uEnv.txt
** Unable to read file uEnv.txt **
Copying Linux from SD to RAM...
reading uImage
3488184 bytes read in 344 ms (9.7 MiB/s)
reading devicetree.dtb
8438 bytes read in 52 ms (158.2 KiB/s)
reading uramdisk.image.gz
5044192 bytes read in 472 ms (10.2 MiB/s)
## Booting kernel from Legacy Image at 02080000 ...
   Image Name:   Linux-3.19.0-xilinx-apf
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    3488120 Bytes = 3.3 MiB
   Load Address: 00008000
   Entry Point:  00008000
   Verifying Checksum ... OK
## Loading init Ramdisk from Legacy Image at 04000000 ...
   Image Name:
   Image Type:   ARM Linux RAMDisk Image (gzip compressed)
   Data Size:    5044128 Bytes = 4.8 MiB
   Load Address: 00000000
   Entry Point:  00000000
   Verifying Checksum ... OK
## Flattened Device Tree blob at 02000000
   Booting using the fdt blob at 0x2000000
   Loading Kernel Image ... OK
   Loading Ramdisk to 1e855000, end 1ed247a0 ... OK
   Loading Device Tree to 1e84f000, end 1e8540f5 ... OK

Starting kernel ...

Booting Linux on physical CPU 0x0
Linux version 3.19.0-xilinx-apf (yogeshc@xsjpsgv105) (gcc version 4.9.1 (Sourcery CodeBench Lite 2014.11-30) ) #22 SMP PREEMPT Mon Jul 6 17:59:10 PDT 2015
CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=18c5387d
CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
Machine model: Zynq ZYBO Development Board
cma: Reserved 256 MiB at 0x0e800000
Memory policy: Data cache writealloc
PERCPU: Embedded 9 pages/cpu @5fb5d000 s8128 r8192 d20544 u36864
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 130048
Kernel command line: console=ttyPS0,115200 earlyprintk
PID hash table entries: 2048 (order: 1, 8192 bytes)
Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
Memory: 244956K/524288K available (4708K kernel code, 251K rwdata, 1644K rodata, 220K init, 250K bss, 17188K reserved, 262144K cma-reserved, 0K highmem)
Virtual kernel memory layout:
    vector  : 0xffff0000 - 0xffff1000   (   4 kB)
    fixmap  : 0xffc00000 - 0xfff00000   (3072 kB)
    vmalloc : 0x60800000 - 0xff000000   (2536 MB)
    lowmem  : 0x40000000 - 0x60000000   ( 512 MB)
    pkmap   : 0x3fe00000 - 0x40000000   (   2 MB)
    modules : 0x3f000000 - 0x3fe00000   (  14 MB)
      .text : 0x40008000 - 0x4063c614   (6354 kB)
      .init : 0x4063d000 - 0x40674000   ( 220 kB)
      .data : 0x40674000 - 0x406b2f20   ( 252 kB)
       .bss : 0x406b2f20 - 0x406f1ab8   ( 251 kB)
Preemptible hierarchical RCU implementation.
        RCU restricting CPUs from NR_CPUS=4 to nr_cpu_ids=2.
RCU: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=2
NR_IRQS:16 nr_irqs:16 16
L2C-310 erratum 769419 enabled
L2C-310 enabling early BRESP for Cortex-A9
L2C-310 full line of zeros enabled for Cortex-A9
L2C-310 ID prefetch enabled, offset 1 lines
L2C-310 dynamic clock gating enabled, standby mode enabled
L2C-310 cache controller enabled, 8 ways, 512 kB
L2C-310: CACHE_ID 0x410000c8, AUX_CTRL 0x76360001
slcr mapped to 60804000
zynq_clock_init: clkc starts at 60804100
Zynq clock init
sched_clock: 64 bits at 325MHz, resolution 3ns, wraps every 3383112499200ns
timer #0 at 60806000, irq=17
Console: colour dummy device 80x30
Calibrating delay loop... 1292.69 BogoMIPS (lpj=6463488)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
CPU: Testing write buffer coherency: ok
CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
Setting up static identity map for 0x475660 - 0x4756b8
CPU1: thread -1, cpu 1, socket 0, mpidr 80000001
Brought up 2 CPUs
SMP: Total of 2 processors activated (2591.94 BogoMIPS).
CPU: All CPU(s) started in SVC mode.
devtmpfs: initialized
VFP support v0.3: implementor 41 architecture 3 part 30 variant 9 rev 4
NET: Registered protocol family 16
DMA: preallocated 256 KiB pool for atomic coherent allocations
cpuidle: using governor ladder
cpuidle: using governor menu
hw-breakpoint: found 5 (+1 reserved) breakpoint and 1 watchpoint registers.
hw-breakpoint: maximum watchpoint size is 4 bytes.
zynq-ocm f800c000.ocmc: ZYNQ OCM pool: 256 KiB @ 0x60880000
vgaarb: loaded
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
media: Linux media interface: v0.10
Linux video capture interface: v2.00
pps_core: LinuxPPS API ver. 1 registered
pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
PTP clock support registered
EDAC MC: Ver: 3.0.0
Advanced Linux Sound Architecture Driver Initialized.
Switched to clocksource arm_global_timer
NET: Registered protocol family 2
TCP established hash table entries: 4096 (order: 2, 16384 bytes)
TCP bind hash table entries: 4096 (order: 3, 32768 bytes)
TCP: Hash tables configured (established 4096 bind 4096)
TCP: reno registered
UDP hash table entries: 256 (order: 1, 8192 bytes)
UDP-Lite hash table entries: 256 (order: 1, 8192 bytes)
NET: Registered protocol family 1
RPC: Registered named UNIX socket transport module.
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
RPC: Registered tcp NFSv4.1 backchannel transport module.
Trying to unpack rootfs image as initramfs...
Freeing initrd memory: 4928K (5e855000 - 5ed25000)
hw perfevents: enabled with armv7_cortex_a9 PMU driver, 7 counters available
futex hash table entries: 512 (order: 3, 32768 bytes)
jffs2: version 2.2. (NAND) (SUMMARY)  c 2001-2006 Red Hat, Inc.
io scheduler noop registered
io scheduler deadline registered
io scheduler cfq registered (default)
dma-pl330 f8003000.dmac: Loaded driver for PL330 DMAC-241330
dma-pl330 f8003000.dmac:        DBUFF-128x8bytes Num_Chans-8 Num_Peri-4 Num_Events-16
e0001000.serial: ttyPS0 at MMIO 0xe0001000 (irq = 142, base_baud = 3125000) is a xuartps
console [ttyPS0] enabled
xdevcfg f8007000.devcfg: ioremap 0xf8007000 to 6086c000
[drm] Initialized drm 1.1.0 20060810
brd: module loaded
loop: module loaded
CAN device driver interface
libphy: MACB_mii_bus: probed
macb e000b000.ethernet eth0: Cadence GEM rev 0x00020118 at 0xe000b000 irq 143 (00:0a:35:00:01:22)
macb e000b000.ethernet eth0: attached PHY driver [Generic PHY] (mii_bus:phy_addr=e000b000.etherne:00, irq=-1)
e1000e: Intel(R) PRO/1000 Network Driver - 2.3.2-k
e1000e: Copyright(c) 1999 - 2014 Intel Corporation.
ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
ehci-pci: EHCI PCI platform driver
usbcore: registered new interface driver usb-storage
mousedev: PS/2 mouse device common for all mice
i2c /dev entries driver
zynq-edac f8006000.memory-controller: ecc not enabled
Xilinx Zynq CpuIdle Driver started
Driver 'mmcblk' needs updating - please use bus_type methods
sdhci: Secure Digital Host Controller Interface driver
sdhci: Copyright(c) Pierre Ossman
sdhci-pltfm: SDHCI platform and OF driver helper
sdhci-arasan e0100000.sdhci: No vmmc regulator found
sdhci-arasan e0100000.sdhci: No vqmmc regulator found
mmc0: SDHCI controller on e0100000.sdhci [e0100000.sdhci] using ADMA
ledtrig-cpu: registered to indicate activity on CPUs
usbcore: registered new interface driver usbhid
usbhid: USB HID core driver
xlnk major 245
xlnk driver loaded
xlnk_pdev is not null
TCP: cubic registered
NET: Registered protocol family 17
can: controller area network core (rev 20120528 abi 9)
NET: Registered protocol family 29
can: raw protocol (rev 20120528)
can: broadcast manager protocol (rev 20120528 t)
can: netlink gateway (rev 20130117) max_hops=1
Registering SWP/SWPB emulation handler
drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
ALSA device list:
  No soundcards found.
Freeing unused kernel memory: 220K (4063d000 - 40674000)
INIT: mmc0: new high speed SDHC card at address b368
mmcblk0: mmc0:b368 USD   7.45 GiB
 mmcblk0: p1 p2
version 2.88 booting
mkdir: can't create directory '/run/media/mmcblk0p1': No such file or directory
mount: mounting /dev/mmcblk0p1 on /run/media/mmcblk0p1 failed: No such file or directory
mkdir: can't create directory '/run/media/mmcblk0p2': No such file or directory
mount: mounting /dev/mmcblk0p2 on /run/media/mmcblk0p2 failed: No such file or directory
Creating /dev/flash/* device nodes
random: dd urandom read with 1 bits of entropy available
starting Busybox inet Daemon: inetd... done.
update-rc.d: /etc/init.d/run-postinsts exists during rc.d purge (continuing)
 Removing any system startup links for run-postinsts ...
  /etc/rcS.d/S99run-postinsts
INIT: Entering runlevel: 5
Configuring network interfaces... udhcpc (v1.23.1) started
Sending discover...
Sending discover...
Sending select for 192.168.3.63...
Lease of 192.168.3.63 obtained, lease time 86400
/etc/udhcpc.d/50default: Adding DNS 192.168.3.1
done.
Starting Dropbear SSH server: Generating key, this may take a while...
Public key portion is:

省略

dropbear.
Starting tcf-agent: OK

sh-4.3#



sds_alloc(), sds_free() を malloc(), free() に変更してやってみたところ、ソフトウェアのラプラシアンフィルタ処理時間は変動が無くなった。約 300 us 程度だった。ハードウェアのラプラシアンフィルタ処理時間は 588 us 位なので、やはり sds_alloc() に比べて時間が長くなっている。ハードウェアは sds_alloc(), ソフトウェアは malloc() で領域を確保したほうが良さそうだ。
SDSoC_101_150808.png
  1. 2015年08月08日 05:05 |
  2. SDSoC
  3. | トラックバック:0
  4. | コメント:3

コメント

TCFでのリモードデバッグについて

いつも参考にさせていただいております。
さて、起動メッセージの最後にdropbearとtcf-agentが出力されていますが、TCFによるリモートデバッグは可能なのでしょうか。
私の場合、SDK2015.4上で、Zyboがpetalinuxの場合はTCFが正常に動くのですが、ubuntuあるいはliranoにdropbearとtcf-agentを入れて、Zyboへのelfファイルは書き込めているのですが、Debug画面にTCF Agent:Disconnected)No such File or directoryのエラーが出てきます。
もし、marseeさんがTCFをお使いでしたら、環境、手順などをお教えいただけないでしょうか。
よろしくお願いいたします。

  1. 2016/03/09(水) 23:07:47 |
  2. URL |
  3. sakachan #uGiq2/fM
  4. [ 編集 ]

私はTCFは使っていません。と言うかUbuntuだとSDKのリモートデバックが上手く行っていないです。
ZYBO上でGDBでデバックしています。何故か?DDDも動かなかったです。

でも、SDSoC上ではデバックする必要が無いと言いますか?リモートデバックする必要が無いんじゃないでしょうか?ツールが動作を保証すると思います。SDSoCがバグってダメな時は、SDSoCを使わずに通常の手順でやれば良いのでは?と思います。
  1. 2016/03/10(木) 05:17:36 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

承認待ちコメント

このコメントは管理者の承認待ちです
  1. 2016/03/10(木) 17:58:08 |
  2. |
  3. #
  4. [ 編集 ]

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
http://marsee101.blog19.fc2.com/tb.php/3223-33e7a885
この記事にトラックバックする(FC2ブログユーザー)