This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
PATCH: Add __x86_64_data_cache_size
- From: "H.J. Lu" <hongjiu dot lu at intel dot com>
- To: GNU C Library <libc-alpha at sourceware dot org>
- Date: Thu, 31 Dec 2009 10:41:05 -0800
- Subject: PATCH: Add __x86_64_data_cache_size
- Reply-to: "H.J. Lu" <hjl dot tools at gmail dot com>
Hi,
We are working on the optimized 32bit and 64bit memset . We need the full
size of the first level cache. Otherwise, we see 20% performance drop
vs. 15% performance gain around the the first level cache size on Intel
Atom. This patch adds __x86_64_data_cache_size.
Thanks.
H.J.
---
2009-12-31 H.J. Lu <hongjiu.lu@intel.com>
* sysdeps/i386/i686/cacheinfo.c (__x86_64_data_cache_size): New.
* sysdeps/x86_64/cacheinfo.c (__x86_64_data_cache_size): New.
(init_cacheinfo): Set __x86_64_data_cache_size.
diff --git a/sysdeps/i386/i686/cacheinfo.c b/sysdeps/i386/i686/cacheinfo.c
index 82e4cd2..f8b7f52 100644
--- a/sysdeps/i386/i686/cacheinfo.c
+++ b/sysdeps/i386/i686/cacheinfo.c
@@ -1,3 +1,4 @@
+#define __x86_64_data_cache_size __x86_data_cache_size
#define __x86_64_data_cache_size_half __x86_data_cache_size_half
#define __x86_64_shared_cache_size __x86_shared_cache_size
#define __x86_64_shared_cache_size_half __x86_shared_cache_size_half
diff --git a/sysdeps/x86_64/cacheinfo.c b/sysdeps/x86_64/cacheinfo.c
index 5b66c62..d586981 100644
--- a/sysdeps/x86_64/cacheinfo.c
+++ b/sysdeps/x86_64/cacheinfo.c
@@ -452,9 +452,10 @@ __cache_sysconf (int name)
}
-/* Half the data cache size for use in memory and string routines, typically
+/* Data cache size for use in memory and string routines, typically
L1 size. */
long int __x86_64_data_cache_size_half attribute_hidden = 32 * 1024 / 2;
+long int __x86_64_data_cache_size attribute_hidden = 32 * 1024;
/* Shared cache size for use in memory and string routines, typically
L2 or L3 size. */
long int __x86_64_shared_cache_size_half attribute_hidden = 1024 * 1024 / 2;
@@ -657,7 +658,10 @@ init_cacheinfo (void)
}
if (data > 0)
- __x86_64_data_cache_size_half = data / 2;
+ {
+ __x86_64_data_cache_size_half = data / 2;
+ __x86_64_data_cache_size = data;
+ }
if (shared > 0)
{