[Gambas-bugtracker] Bug #1701: Very Slow 33times pointers l = long@(xxxpointer) notation compared to memcpy(varptr(l), MyPointer, sizeof(gb.long))

bugtracker at gambaswiki.org bugtracker at gambaswiki.org
Sun Dec 22 20:54:42 CET 2019


http://gambaswiki.org/bugtracker/edit?object=BUG.1701&from=L21haW4-

Brian G reported a new bug.

Summary
-------

Very Slow 33times pointers l = long@(xxxpointer)  notation compared to memcpy(varptr(l),MyPointer,sizeof(gb.long))

Type             : Bug
Priority         : Medium
Gambas version   : 3.14
Product          : Language


Description
-----------

It seems that pointers to values in memory are very slow , can this be fixed, I know it has to be slower but, any way to speed this up?
I am doing a lot of manipulation of shared memory in my app, so have had to resort to memcpy and memcmp. 
The following program as example:

Extern memset(location As Pointer, value As Integer, Len As Integer) As Integer In "libc:6"
Extern memcpy(dest As Pointer, src As Pointer, Len As Integer) As Integer In "libc:6"

Public Sub Main()

 Dim MyPointer As Pointer = Alloc(10000)
 Dim MyLong As Long
 Dim MyLong2 As Long = 0
 Dim starttime As Float
 Dim end1, end2 As Float
 
 Print "Testing speed of indirect reference using mylong = long@(mypointer) pointer Refrence 1,000,000 times"
 memset(MyPointer, 0, 32)
 
 starttime = Timer
 For i As Integer = 1 To 1000000
    MyLong = Long@(MyPointer)
 Next
 end2 = Timer - starttime
Print "Time required to fetch long@ ", end2

Print "Testing speed of indirect reference using mylong = memcpy  pointer Refrence 1,000,000"
starttime = Timer
 For i As Integer = 1 To 1000000
    memcpy(VarPtr(MyLong2), MyPointer, SizeOf(gb.long))
 Next
 end1 = Timer - starttime
Print "Time required to copy long ", end1

Print "Factor in speed diff =", end2 / end1

Free(MyPointer)

End

output follow:

Testing speed of indirect refrence using mylong = long@(mypointer) pointer Refrence 1,000,000 times
Time required to fetch long@    8.61431147900294
Testing speed of indirect refrence using mylong = memcpy  pointer Refrence 1,000,000
Time required to copy long      0.255567631014856
Factor in speed diff =  33.7065826560102


System information
------------------

[System]
Gambas=3.14.90
OperatingSystem=Linux
Kernel=5.3.0-24-generic
Architecture=x86_64
Distribution=Linux Mint 19.2 Tina
Desktop=MATE
Theme=Qt5CTProxy
Language=en_US.UTF-8
Memory=7340M

[Libraries]
Cairo=libcairo.so.2.11510.0
Curl=libcurl.so.4.5.0
DBus=libdbus-1.so.3.19.4
GStreamer=libgstreamer-1.0.so.0.1405.0
GTK+2=libgtk-x11-2.0.so.0.2400.32
GTK+3=libgtk-3.so.0.2200.30
OpenGL=libGL.so.1.0.0
Poppler=libpoppler.so.73.0.0
QT4=libQtCore.so.4.8.7
QT5=libQt5Core.so.5.9.5
SDL=libSDL-1.2.so.0.11.4
SQLite=libsqlite3.so.0.8.6

[Environment]
CLUTTER_BACKEND=x11
COMPIZ_CONFIG_PROFILE=mate
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
DEFAULTS_PATH=/usr/share/gconf/mate.default.path
DESKTOP_SESSION=mate
DISPLAY=:0
GB_GUI=gb.qt5
GDMSESSION=mate
GDM_LANG=en_US
GIO_LAUNCHED_DESKTOP_FILE=<home>/Desktop/gambas3.desktop
GIO_LAUNCHED_DESKTOP_FILE_PID=20831
GPG_AGENT_INFO=/run/user/1000/gnupg/S.gpg-agent:0:1
GTK_MODULES=gail:atk-bridge
GTK_OVERLAY_SCROLLING=0
HOME=<home>
INSIDE_CAJA_PYTHON=
LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8
LOGNAME=<user>
MANDATORY_PATH=/usr/share/gconf/mate.mandatory.path
MATE_DESKTOP_SESSION_ID=this-is-deprecated
PATH=<home>/.local/bin:<home>/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
PWD=<home>
QT_ACCESSIBILITY=1
QT_AUTO_SCREEN_SCALE_FACTOR=0
QT_LOGGING_RULES=*.debug=false
QT_QPA_PLATFORMTHEME=qt5ct
QT_SCALE_FACTOR=1
SESSION_MANAGER=local/<hostname>:@/tmp/.ICE-unix/1474,unix/<hostname>:/tmp/.ICE-unix/1474
SHELL=/bin/bash
SHLVL=0
SSH_AGENT_PID=1811
SSH_AUTH_SOCK=/run/user/1000/keyring/ssh
TZ=:/etc/localtime
USER=<user>
XAUTHORITY=<home>/.Xauthority
XDG_CONFIG_DIRS=/etc/xdg/xdg-mate:/etc/xdg
XDG_CURRENT_DESKTOP=MATE
XDG_DATA_DIRS=/usr/share/mate:<home>/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share
XDG_GREETER_DATA_DIR=/var/lib/lightdm-data/<user>
XDG_RUNTIME_DIR=/run/user/1000
XDG_SEAT=seat0
XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0
XDG_SESSION_DESKTOP=mate
XDG_SESSION_ID=c2
XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session0
XDG_SESSION_TYPE=x11
XDG_VTNR=7




More information about the Bugtracker mailing list