Joker114w and CPU Temperatures

Discussion of chess software programming and technical issues.

Moderators: hgm, Rebel, chrisw

mhalstern
Posts: 484
Joined: Wed Nov 18, 2009 1:09 am

Joker114w and CPU Temperatures

Post by mhalstern »

This is very interesting.

On my I7-920 running at stock speed, quad core engines get my cpu to between 44 and 49 degrees celcius. Single core engines get it between 41 and 42 degrees celcius. Joker 114w (single core) consistently gets my cpu to 45 degrees celcius!

Is this an example of efficient programming, getting the most out of a core?

I'm curious as to what causes the extra heat?

Thanks
bob
Posts: 20943
Joined: Mon Feb 27, 2006 7:30 pm
Location: Birmingham, AL

Re: Joker114w and CPU Temperatures

Post by bob »

mhalstern wrote:This is very interesting.

On my I7-920 running at stock speed, quad core engines get my cpu to between 44 and 49 degrees celcius. Single core engines get it between 41 and 42 degrees celcius. Joker 114w (single core) consistently gets my cpu to 45 degrees celcius!

Is this an example of efficient programming, getting the most out of a core?

I'm curious as to what causes the extra heat?

Thanks
I doubt it means anything at all. I've run an i7 up to right at 100c when testing a prototype dual-chip 8 total cores.
User avatar
hgm
Posts: 27787
Joined: Fri Mar 10, 2006 10:06 am
Location: Amsterdam
Full name: H G Muller

Re: Joker114w and CPU Temperatures

Post by hgm »

Joker was designed to run almost exclusively from the level-I cache. So it is very wel possible that it has much fewer pipe-line stalls due to waiting for memory data than typical engine code. And pipe-line stalls save power.
User avatar
Kempelen
Posts: 620
Joined: Fri Feb 08, 2008 10:44 am
Location: Madrid - Spain

Re: Joker114w and CPU Temperatures

Post by Kempelen »

hgm wrote:Joker was designed to run almost exclusively from the level-I cache. So it is very wel possible that it has much fewer pipe-line stalls due to waiting for memory data than typical engine code. And pipe-line stalls save power.
How exactly is the way to design that way? I have searched in internet for the guidelines which apply, but have not found anything. All I have found is about code speed and performance, but not for designed application that way.... maybe is it described in any book??
Fermin Serrano
Author of 'Rodin' engine
http://sites.google.com/site/clonfsp/
mathmoi
Posts: 286
Joined: Mon Mar 13, 2006 5:23 pm
Location: Québec

Re: Joker114w and CPU Temperatures

Post by mathmoi »

Kempelen wrote:
hgm wrote:Joker was designed to run almost exclusively from the level-I cache. So it is very wel possible that it has much fewer pipe-line stalls due to waiting for memory data than typical engine code. And pipe-line stalls save power.
How exactly is the way to design that way? I have searched in internet for the guidelines which apply, but have not found anything. All I have found is about code speed and performance, but not for designed application that way.... maybe is it described in any book??
You simply need to reduce your total memory footprint. If your memory footprint is smaller than the cache your will never (not really never, but let say) have cache miss.

You need to be careful about you tables (Transposition tables, precalculations, magic tables, etc.) size and your code size (your application need to fit in the cache too).

Most of the time you can't really fit all you program in cache size. In this case it's till important to reduce your memory footprint to minimize the number of cache miss.
User avatar
hgm
Posts: 27787
Joined: Fri Mar 10, 2006 10:06 am
Location: Amsterdam
Full name: H G Muller

Re: Joker114w and CPU Temperatures

Post by hgm »

Small memory footprint is indeed a requirement. In addition I laid out the global data that was important for the search by putting it all in one struct, so that it is allocated contiguously, and cannot give accidental cache collisions.
edwardyu
Posts: 34
Joined: Mon Nov 17, 2008 6:58 am

Re: Joker114w and CPU Temperatures

Post by edwardyu »

Is there any difference if I initialize a table as
table[n]={v, v, v, ..., };
instead of pre-calculate the table contents in an initialization function?
Which one has less memory and faster?
mathmoi
Posts: 286
Joined: Mon Mar 13, 2006 5:23 pm
Location: Québec

Re: Joker114w and CPU Temperatures

Post by mathmoi »

edwardyu wrote:Is there any difference if I initialize a table as
table[n]={v, v, v, ..., };
instead of pre-calculate the table contents in an initialization function?
Which one has less memory and faster?
It depends on what is in the table and how much it cost to pre-calculate. However it's not really relevant, since it's only executed once at the start of the engine. It's not important for the core part of your engine that is the search.

What is important is to fit in cache (or fit as much as possible) all the memory used by your search. This is the board representation, all the stack variables of the search, the search code itself, any pre-calculation used during the search (this include move generation/execution/evaluation). If most of it fit in the cache, it will be loaded when the search start and will stay there, limiting the cache miss (as you probably know a cache miss is when a page is not in the cache and need to be retrieved from main memory). This is usually an order of magnitude slower than a cache access. Things like the TT will obviously not fit in the cache, But they're still usefull since they allow you to skip whole tree branches. One thing you can do regarding the TT and the cache is make sure that every cache entry do not overlap on two cache page. So every TT probe will only generate one cache miss at most.
bob
Posts: 20943
Joined: Mon Feb 27, 2006 7:30 pm
Location: Birmingham, AL

Re: Joker114w and CPU Temperatures

Post by bob »

edwardyu wrote:Is there any difference if I initialize a table as
table[n]={v, v, v, ..., };
instead of pre-calculate the table contents in an initialization function?
Which one has less memory and faster?
Compile-time initialization will use less memory as you won't need the instructions to initialize at run-time. Other than that, there is no difference whatsoever. Initializing at compile time will make the binary file larger. Which might be a pain for very large arrays. But otherwise, it's effectively irrelevant as to which approach you choose. I prefer compile-time whenever possible.
User avatar
Graham Banks
Posts: 41414
Joined: Sun Feb 26, 2006 10:52 am
Location: Auckland, NZ

Re: Joker114w and CPU Temperatures

Post by Graham Banks »

mhalstern wrote:This is very interesting.

On my I7-920 running at stock speed, quad core engines get my cpu to between 44 and 49 degrees celcius. Single core engines get it between 41 and 42 degrees celcius. Joker 114w (single core) consistently gets my cpu to 45 degrees celcius!

Is this an example of efficient programming, getting the most out of a core?

I'm curious as to what causes the extra heat?

Thanks
I have seen similar behaviour with some engines.
Zappa springs immediately to mind. When it was one of two engines running, the cpu temp was always a few degrees higher than when other engines were playing.

Cheers,
Graham.
gbanksnz at gmail.com