| @@ -1,4 +1,16 @@ | |||||
| OpenBLAS ChangeLog | OpenBLAS ChangeLog | ||||
| ==================================================================== | |||||
| Version 0.2.2 | |||||
| 6-July-2012 | |||||
| common: | |||||
| * Fixed exporting DLL functions bug on Windows/MingW | |||||
| * Support GNU Hurd (Thank Sylvestre Ledru) | |||||
| * Support kfreebsd kernel (Thank Sylvestre Ledru) | |||||
| x86/x86-64: | |||||
| * Support Intel Sandy Bridge 22nm desktop/mobile CPU | |||||
| SPARC: | |||||
| * Improve the detection of SPARC (Thank Sylvestre Ledru) | |||||
| ==================================================================== | ==================================================================== | ||||
| Version 0.2.1 | Version 0.2.1 | ||||
| 30-Jun-2012 | 30-Jun-2012 | ||||
| @@ -3,7 +3,7 @@ | |||||
| # | # | ||||
| # This library's version | # This library's version | ||||
| VERSION = 0.2.1 | |||||
| VERSION = 0.2.2 | |||||
| # If you set the suffix, the library name will be libopenblas_$(LIBNAMESUFFIX).a | # If you set the suffix, the library name will be libopenblas_$(LIBNAMESUFFIX).a | ||||
| # and libopenblas_$(LIBNAMESUFFIX).so. Meanwhile, the soname in shared library | # and libopenblas_$(LIBNAMESUFFIX).so. Meanwhile, the soname in shared library | ||||
| @@ -86,7 +86,13 @@ static inline int my_set_mempolicy(int mode, const unsigned long *addr, unsigned | |||||
| return syscall(SYS_set_mempolicy, mode, addr, flag); | return syscall(SYS_set_mempolicy, mode, addr, flag); | ||||
| } | } | ||||
| static inline int my_gettid(void) { return syscall(SYS_gettid); } | |||||
| static inline int my_gettid(void) { | |||||
| #ifdef SYS_gettid | |||||
| return syscall(SYS_gettid); | |||||
| #else | |||||
| return getpid(); | |||||
| #endif | |||||
| } | |||||
| #endif | #endif | ||||
| #endif | #endif | ||||
| @@ -975,27 +975,33 @@ int get_cpuname(void){ | |||||
| return CPUTYPE_DUNNINGTON; | return CPUTYPE_DUNNINGTON; | ||||
| } | } | ||||
| break; | break; | ||||
| case 2: | |||||
| switch (model) { | |||||
| case 5: | |||||
| //Intel Core (Clarkdale) / Core (Arrandale) | |||||
| // Pentium (Clarkdale) / Pentium Mobile (Arrandale) | |||||
| // Xeon (Clarkdale), 32nm | |||||
| return CPUTYPE_NEHALEM; | |||||
| case 10: | |||||
| //Intel Core i5-2000 /i7-2000 (Sandy Bridge) | |||||
| return CPUTYPE_SANDYBRIDGE; | |||||
| case 12: | |||||
| //Xeon Processor 5600 (Westmere-EP) | |||||
| return CPUTYPE_NEHALEM; | |||||
| case 13: | |||||
| //Intel Core i7-3000 / Xeon E5 (Sandy Bridge) | |||||
| return CPUTYPE_SANDYBRIDGE; | |||||
| case 15: | |||||
| //Xeon Processor E7 (Westmere-EX) | |||||
| return CPUTYPE_NEHALEM; | |||||
| } | |||||
| break; | |||||
| case 2: | |||||
| switch (model) { | |||||
| case 5: | |||||
| //Intel Core (Clarkdale) / Core (Arrandale) | |||||
| // Pentium (Clarkdale) / Pentium Mobile (Arrandale) | |||||
| // Xeon (Clarkdale), 32nm | |||||
| return CPUTYPE_NEHALEM; | |||||
| case 10: | |||||
| //Intel Core i5-2000 /i7-2000 (Sandy Bridge) | |||||
| return CPUTYPE_SANDYBRIDGE; | |||||
| case 12: | |||||
| //Xeon Processor 5600 (Westmere-EP) | |||||
| return CPUTYPE_NEHALEM; | |||||
| case 13: | |||||
| //Intel Core i7-3000 / Xeon E5 (Sandy Bridge) | |||||
| return CPUTYPE_SANDYBRIDGE; | |||||
| case 15: | |||||
| //Xeon Processor E7 (Westmere-EX) | |||||
| return CPUTYPE_NEHALEM; | |||||
| } | |||||
| break; | |||||
| case 3: | |||||
| switch (model) { | |||||
| case 10: | |||||
| return CPUTYPE_SANDYBRIDGE; | |||||
| } | |||||
| break; | |||||
| } | } | ||||
| break; | break; | ||||
| case 0x7: | case 0x7: | ||||
| @@ -1349,6 +1355,12 @@ int get_coretype(void){ | |||||
| return CORE_NEHALEM; | return CORE_NEHALEM; | ||||
| } | } | ||||
| break; | break; | ||||
| case 3: | |||||
| switch (model) { | |||||
| case 10: | |||||
| return CORE_SANDYBRIDGE; | |||||
| } | |||||
| break; | |||||
| } | } | ||||
| break; | break; | ||||
| @@ -34,7 +34,7 @@ COMPILER_GNU | |||||
| OS_LINUX | OS_LINUX | ||||
| #endif | #endif | ||||
| #if defined(__FreeBSD__) | |||||
| #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) | |||||
| OS_FREEBSD | OS_FREEBSD | ||||
| #endif | #endif | ||||
| @@ -70,6 +70,11 @@ OS_CYGWIN_NT | |||||
| OS_INTERIX | OS_INTERIX | ||||
| #endif | #endif | ||||
| #if defined(__gnu_hurd__) | |||||
| /* Hurd is very similar to GNU/Linux, it should work out of the box */ | |||||
| OS_LINUX | |||||
| #endif | |||||
| #if defined(__i386) || defined(_X86) | #if defined(__i386) || defined(_X86) | ||||
| ARCH_X86 | ARCH_X86 | ||||
| #endif | #endif | ||||
| @@ -1128,7 +1128,7 @@ static BLASULONG init_lock = 0UL; | |||||
| static void _touch_memory(blas_arg_t *arg, BLASLONG *range_m, BLASLONG *range_n, | static void _touch_memory(blas_arg_t *arg, BLASLONG *range_m, BLASLONG *range_n, | ||||
| void *sa, void *sb, BLASLONG pos) { | void *sa, void *sb, BLASLONG pos) { | ||||
| #ifndef ARCH_POWER | |||||
| #if !defined(ARCH_POWER) && !defined(ARCH_SPARC) | |||||
| long size; | long size; | ||||
| BLASULONG buffer; | BLASULONG buffer; | ||||
| @@ -2760,30 +2760,27 @@ if ($ARGV[0] eq "win2k"){ | |||||
| print "EXPORTS\n"; | print "EXPORTS\n"; | ||||
| $count = 1; | $count = 1; | ||||
| #remove openblas_set_num_threads | |||||
| @underscore_objs = grep /[^openblas_set_num_threads]/,@underscore_objs; | |||||
| foreach $objs (@underscore_objs) { | foreach $objs (@underscore_objs) { | ||||
| $uppercase = $objs; | |||||
| $uppercase =~ tr/[a-z]/[A-Z]/; | |||||
| print "\t$objs=$objs","_ \@", $count, "\n"; | |||||
| $count ++; | |||||
| print "\t",$objs, "_=$objs","_ \@", $count, "\n"; | |||||
| $count ++; | |||||
| print "\t$uppercase=$objs", "_ \@", $count, "\n"; | |||||
| $count ++; | |||||
| unless ($objs =~ /openblas_set_num_threads/) { #remove openblas_set_num_threads | |||||
| $uppercase = $objs; | |||||
| $uppercase =~ tr/[a-z]/[A-Z]/; | |||||
| print "\t$objs=$objs","_ \@", $count, "\n"; | |||||
| $count ++; | |||||
| print "\t",$objs, "_=$objs","_ \@", $count, "\n"; | |||||
| $count ++; | |||||
| print "\t$uppercase=$objs", "_ \@", $count, "\n"; | |||||
| $count ++; | |||||
| } | |||||
| } | } | ||||
| #for openblas_set_num_threads | |||||
| #for openblas_set_num_threads | |||||
| print "\topenblas_set_num_threads_=openblas_set_num_threads_ \@", $count, "\n"; | print "\topenblas_set_num_threads_=openblas_set_num_threads_ \@", $count, "\n"; | ||||
| $count ++; | |||||
| foreach $objs (@no_underscore_objs) { | |||||
| print "\t",$objs,"=$objs"," \@", $count, "\n"; | |||||
| $count ++; | $count ++; | ||||
| # if ($ARGV[4] == 0) { | |||||
| foreach $objs (@no_underscore_objs) { | |||||
| print "\t",$objs,"=$objs"," \@", $count, "\n"; | |||||
| $count ++; | |||||
| } | |||||
| # } | |||||
| } | |||||
| exit(0); | exit(0); | ||||
| } | } | ||||
| @@ -1482,7 +1482,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||||
| #define GEMM_THREAD gemm_thread_mn | #define GEMM_THREAD gemm_thread_mn | ||||
| #endif | #endif | ||||
| #if defined(SPARC) && defined(V9) | |||||
| #if (defined(SPARC) && defined(V9)) || defined(__sparc_v9__) | |||||
| #define SNUMOPT 2 | #define SNUMOPT 2 | ||||
| #define DNUMOPT 2 | #define DNUMOPT 2 | ||||