[Plugin] [REL] Math Plugin
#29

Quote:
Originally Posted by JernejL
Посмотреть сообщение
****** and other experts - any idea why the c++ version is slower? i managed to track down to invoke->callNative function.. so whenever i call sa-mp natives via invoke that's significantly slower than doing it in pawn (pure math functions work faster tho), so this is unacceptable to me.. if calling samp natives via invoke makes the whole thing slower than in pawn, i should just stop this project - there is no other option.
I won't make any guesses as to why exactly that bit of code is so much slower than a PAWN implemenation. There are probably any number of reasons since the function does so many things each time it's called. It uses variadic macros, allocates and deallocates memory, loops through arrays, performs lookups in containers, and much more. I've always known that it's not the most optimal solution in terms of speed, but it is faster than simply calling the native from a public function inside the plugin.

Anyway, I've done some profiling and Zeex's gamemode SDK is clearly the winner here.

Код:
void methodOne()
{
	boost::chrono::high_resolution_clock::time_point begin = boost::chrono::high_resolution_clock::now();
	for (int i = 0; i < 1000000; ++i)
	{
		invoke->callNative(&PAWN::GetPlayerPos, playerid, &x, &y, &z);
	}
	boost::chrono::duration<double, boost::milli> end = boost::chrono::high_resolution_clock::now() - begin;
	logprintf("methodOne(): %g", end.count());
}
Код:
void methodTwo()
{
	boost::chrono::high_resolution_clock::time_point begin = boost::chrono::high_resolution_clock::now();
	for (int i = 0; i < 1000000; ++i)
	{
		samp::GetPlayerPos(playerid, x, y, z);
	}
	boost::chrono::duration<double, boost::milli> end = boost::chrono::high_resolution_clock::now() - begin;
	logprintf("methodTwo(): %g", end.count());
}
Код:
[07:20:48] methodOne(): 305.934
[07:20:48] methodTwo(): 22.3173
I will be using this in the next version of the streamer plugin.

Edit: I also don't mean to say that callNative is incredibly slow. In the test above, each call took about 300 nanoseconds (or 300 billionths of a second) to complete. That's still pretty fast, even if a PAWN implementation is a bit faster.
Reply


Messages In This Thread
[REL] Math Plugin - by JernejL - 20.07.2011, 18:08
Re: WIP Math Plugin - by Calgon - 20.07.2011, 18:11
Re: WIP Math Plugin - by JernejL - 20.07.2011, 18:15
Re: WIP Math Plugin - by Donya - 20.07.2011, 18:15
Re: WIP Math Plugin - by Calgon - 20.07.2011, 18:17
Respuesta: WIP Math Plugin - by clavador - 20.07.2011, 18:20
Re: Respuesta: WIP Math Plugin - by JernejL - 20.07.2011, 18:21
Re: WIP Math Plugin - by Kyosaur - 20.07.2011, 19:30
Re: WIP Math Plugin - by Omega-300 - 20.07.2011, 19:45
Re: WIP Math Plugin - by Gamer_Z - 20.07.2011, 20:33
Re: WIP Math Plugin - by Jay_ - 20.07.2011, 20:40
Re: WIP Math Plugin - by gamer931215 - 20.07.2011, 22:16
Re: WIP Math Plugin - by JernejL - 20.07.2011, 22:18
Re: WIP Math Plugin - by Mauzen - 20.07.2011, 22:33
Re: WIP Math Plugin - by JernejL - 20.07.2011, 22:52
Re: WIP Math Plugin - by linuxthefish - 20.07.2011, 23:17
Re: WIP Math Plugin - by Famalamalam - 20.07.2011, 23:50
Re: WIP Math Plugin - by JernejL - 20.07.2011, 23:54
Re: WIP Math Plugin - by Whitetiger - 21.07.2011, 00:29
Re: WIP Math Plugin - by linuxthefish - 21.07.2011, 00:38
Re: WIP Math Plugin - by Famalamalam - 21.07.2011, 00:41
Re: WIP Math Plugin - by JernejL - 21.07.2011, 00:54
Re: WIP Math Plugin - by JernejL - 21.07.2011, 11:05
Re: WIP Math Plugin - by Babul - 21.07.2011, 14:01
Re: WIP Math Plugin - by samiras - 21.07.2011, 14:58
Re: WIP Math Plugin - by JernejL - 21.07.2011, 16:42
Re: WIP Math Plugin - by steki. - 21.07.2011, 17:36
Re: WIP Math Plugin - by wups - 21.07.2011, 20:35
Re: WIP Math Plugin - by Incognito - 22.07.2011, 13:20
Re: WIP Math Plugin - by samiras - 24.07.2011, 17:55
Re: [REL] Math Plugin - by dr.pepper - 14.08.2011, 18:11
Re: [REL] Math Plugin - by Blacklite - 16.08.2011, 10:21
Re: [REL] Math Plugin - by cyber_punk - 17.08.2011, 21:27
Re: [REL] Math Plugin - by linuxthefish - 17.08.2011, 21:38
Re: [REL] Math Plugin - by Kar - 17.08.2011, 22:20
Re: [REL] Math Plugin - by Bakr - 19.08.2011, 03:25
Re: [REL] Math Plugin - by JernejL - 20.08.2011, 16:05
Re: [REL] Math Plugin - by Bakr - 21.08.2011, 01:36
Re: [REL] Math Plugin - by BeckzyBoi - 28.08.2011, 03:30
Re: [REL] Math Plugin - by [IL]HeHu - 29.08.2011, 14:17
Re: [REL] Math Plugin - by AndreT - 29.08.2011, 14:32
Re: [REL] Math Plugin - by Kar - 29.08.2011, 14:51
Re: [REL] Math Plugin - by JernejL - 29.08.2011, 18:27
Re: [REL] Math Plugin - by SourceCode - 15.11.2011, 14:17
Re: [REL] Math Plugin - by Niko_boy - 15.11.2011, 15:25
Re: [REL] Math Plugin - by leong124 - 17.11.2011, 08:45
Re: [REL] Math Plugin - by BeckzyBoi - 22.12.2011, 21:56
Re: [REL] Math Plugin - by leong124 - 23.12.2011, 04:07
Re: [REL] Math Plugin - by BeckzyBoi - 23.12.2011, 22:54
Re: [REL] Math Plugin - by leong124 - 24.12.2011, 16:54
Re: [REL] Math Plugin - by TheArcher - 03.01.2012, 23:30
Re: [REL] Math Plugin - by RyDeR` - 04.01.2012, 00:35
Re: [REL] Math Plugin - by DrTHE - 04.01.2012, 00:44
Re: [REL] Math Plugin - by TheArcher - 04.01.2012, 01:05
Re: [REL] Math Plugin - by zgintasz - 09.06.2012, 12:11
Re: [REL] Math Plugin - by cyber_punk - 04.10.2012, 19:55
Re: [REL] Math Plugin - by TheArcher - 01.02.2013, 18:14
Re: [REL] Math Plugin - by TheArcher - 02.02.2013, 10:25
Re: [REL] Math Plugin - by JernejL - 25.03.2015, 12:14

Forum Jump:


Users browsing this thread: 1 Guest(s)