4e9c34018e 
								
							 
						 
						
							
							
								
								Fix apparent off-by-one error in calculation of MAX_ALLOCATING_THREADS  
							
							... 
							
							
							
							fixes  #1641  
						
							2018-06-30 23:57:50 +02:00  
				
					
						
							
							
								 
						
							
								28c28ed275 
								
							 
						 
						
							
							
								
								Fix data races reported by TSAN.  
							
							
							
						 
						
							2018-06-21 16:41:02 +01:00  
				
					
						
							
							
								 
						
							
								a399d00425 
								
							 
						 
						
							
							
								
								Further improvements to memory.c. ( #1625 )  
							
							... 
							
							
							
							- Compiler TLS is now used only used when the compiler supports it
- If compiler TLS is unsupported, we use platform-specific TLS
- Only one variable (an index) is now in TLS
- We only access TLS once per alloc, and never when freeing
- Allocation / release info is now stored within the allocation itself, by
  over-allocating; this saves having external structures do the bookkeeping, and
  reduces some of the redundant data that was being stored (such as addresses)
- We never hit the alloc lock when not using SMP or when using OpenMP (that was
  my fault)
- Now that there are fewer tracking structures I think this is a bit easier to
  read than before 
							
						 
						
							2018-06-20 22:04:03 +02:00  
				
					
						
							
							
								 
						
							
								bf40f806ef 
								
							 
						 
						
							
							
								
								Remove the need for most locking in memory.c.  
							
							... 
							
							
							
							Using thread local storage for tracking memory allocations means that threads
no longer have to lock at all when doing memory allocations / frees. This
particularly helps the gemm driver since it does an allocation per invocation.
Even without threading at all, this helps, since even calling a lock with
no contention has a cost:
Before this change, no threading:
```
----------------------------------------------------
Benchmark             Time           CPU Iterations
----------------------------------------------------
BM_SGEMM/4          102 ns        102 ns   13504412
BM_SGEMM/6          175 ns        175 ns    7997580
BM_SGEMM/8          205 ns        205 ns    6842073
BM_SGEMM/10         266 ns        266 ns    5294919
BM_SGEMM/16         478 ns        478 ns    2963441
BM_SGEMM/20         690 ns        690 ns    2144755
BM_SGEMM/32        1906 ns       1906 ns     716981
BM_SGEMM/40        2983 ns       2983 ns     473218
BM_SGEMM/64        9421 ns       9422 ns     148450
BM_SGEMM/72       12630 ns      12631 ns     112105
BM_SGEMM/80       15845 ns      15846 ns      89118
BM_SGEMM/90       25675 ns      25676 ns      54332
BM_SGEMM/100      29864 ns      29865 ns      47120
BM_SGEMM/112      37841 ns      37842 ns      36717
BM_SGEMM/128      56531 ns      56532 ns      25361
BM_SGEMM/140      75886 ns      75888 ns      18143
BM_SGEMM/150      98493 ns      98496 ns      14299
BM_SGEMM/160     102620 ns     102622 ns      13381
BM_SGEMM/170     135169 ns     135173 ns      10231
BM_SGEMM/180     146170 ns     146172 ns       9535
BM_SGEMM/189     190226 ns     190231 ns       7397
BM_SGEMM/200     194513 ns     194519 ns       7210
BM_SGEMM/256     396561 ns     396573 ns       3531
```
with this change:
```
----------------------------------------------------
Benchmark             Time           CPU Iterations
----------------------------------------------------
BM_SGEMM/4           95 ns         95 ns   14500387
BM_SGEMM/6          166 ns        166 ns    8381763
BM_SGEMM/8          196 ns        196 ns    7277044
BM_SGEMM/10         256 ns        256 ns    5515721
BM_SGEMM/16         463 ns        463 ns    3025197
BM_SGEMM/20         636 ns        636 ns    2070213
BM_SGEMM/32        1885 ns       1885 ns     739444
BM_SGEMM/40        2969 ns       2969 ns     472152
BM_SGEMM/64        9371 ns       9372 ns     148932
BM_SGEMM/72       12431 ns      12431 ns     112919
BM_SGEMM/80       15615 ns      15616 ns      89978
BM_SGEMM/90       25397 ns      25398 ns      55041
BM_SGEMM/100      29445 ns      29446 ns      47540
BM_SGEMM/112      37530 ns      37531 ns      37286
BM_SGEMM/128      55373 ns      55375 ns      25277
BM_SGEMM/140      76241 ns      76241 ns      18259
BM_SGEMM/150     102196 ns     102200 ns      13736
BM_SGEMM/160     101521 ns     101525 ns      13556
BM_SGEMM/170     136182 ns     136184 ns      10567
BM_SGEMM/180     146861 ns     146864 ns       9035
BM_SGEMM/189     192632 ns     192632 ns       7231
BM_SGEMM/200     198547 ns     198555 ns       6995
BM_SGEMM/256     392316 ns     392330 ns       3539
```
Before, when built with USE_THREAD=1, GEMM_MULTITHREAD_THRESHOLD = 4, the cost
of small matrix operations was overshadowed by thread locking (look smaller than
32) even when not explicitly spawning threads:
```
----------------------------------------------------
Benchmark             Time           CPU Iterations
----------------------------------------------------
BM_SGEMM/4          328 ns        328 ns    4170562
BM_SGEMM/6          396 ns        396 ns    3536400
BM_SGEMM/8          418 ns        418 ns    3330102
BM_SGEMM/10         491 ns        491 ns    2863047
BM_SGEMM/16         710 ns        710 ns    2028314
BM_SGEMM/20         871 ns        871 ns    1581546
BM_SGEMM/32        2132 ns       2132 ns     657089
BM_SGEMM/40        3197 ns       3196 ns     437969
BM_SGEMM/64        9645 ns       9645 ns     144987
BM_SGEMM/72       35064 ns      32881 ns      50264
BM_SGEMM/80       37661 ns      35787 ns      42080
BM_SGEMM/90       36507 ns      36077 ns      40091
BM_SGEMM/100      32513 ns      31850 ns      48607
BM_SGEMM/112      41742 ns      41207 ns      37273
BM_SGEMM/128      67211 ns      65095 ns      21933
BM_SGEMM/140      68263 ns      67943 ns      19245
BM_SGEMM/150     121854 ns     115439 ns      10660
BM_SGEMM/160     116826 ns     115539 ns      10000
BM_SGEMM/170     126566 ns     122798 ns      11960
BM_SGEMM/180     130088 ns     127292 ns      11503
BM_SGEMM/189     120309 ns     116634 ns      13162
BM_SGEMM/200     114559 ns     110993 ns      10000
BM_SGEMM/256     217063 ns     207806 ns       6417
```
and after, it's gone (note this includes my other change which reduces calls
to num_cpu_avail):
```
----------------------------------------------------
Benchmark             Time           CPU Iterations
----------------------------------------------------
BM_SGEMM/4           95 ns         95 ns   12347650
BM_SGEMM/6          166 ns        166 ns    8259683
BM_SGEMM/8          193 ns        193 ns    7162210
BM_SGEMM/10         258 ns        258 ns    5415657
BM_SGEMM/16         471 ns        471 ns    2981009
BM_SGEMM/20         666 ns        666 ns    2148002
BM_SGEMM/32        1903 ns       1903 ns     738245
BM_SGEMM/40        2969 ns       2969 ns     473239
BM_SGEMM/64        9440 ns       9440 ns     148442
BM_SGEMM/72       37239 ns      33330 ns      46813
BM_SGEMM/80       57350 ns      55949 ns      32251
BM_SGEMM/90       36275 ns      36249 ns      42259
BM_SGEMM/100      31111 ns      31008 ns      45270
BM_SGEMM/112      43782 ns      40912 ns      34749
BM_SGEMM/128      67375 ns      64406 ns      22443
BM_SGEMM/140      76389 ns      67003 ns      21430
BM_SGEMM/150      72952 ns      71830 ns      19793
BM_SGEMM/160      97039 ns      96858 ns      11498
BM_SGEMM/170     123272 ns     122007 ns      11855
BM_SGEMM/180     126828 ns     126505 ns      11567
BM_SGEMM/189     115179 ns     114665 ns      11044
BM_SGEMM/200      89289 ns      87259 ns      16147
BM_SGEMM/256     226252 ns     222677 ns       7375
```
I've also tested this with ThreadSanitizer and found no data races during
execution.  I'm not sure why 200 is always faster than it's neighbors, we must
be hitting some optimal cache size or something. 
							
						 
						
							2018-06-14 16:54:58 +01:00  
				
					
						
							
							
								 
						
							
								a8002e283a 
								
							 
						 
						
							
							
								
								Revert "take out unused variables"  
							
							... 
							
							
							
							This reverts commit e5752ff9b3 
							
						 
						
							2018-06-01 23:20:00 +01:00  
				
					
						
							
							
								 
						
							
								f29389c7ac 
								
							 
						 
						
							
							
								
								Merge pull request  #1520  from martin-frbg/cpucounts  
							
							... 
							
							
							
							Catch invalid cpu count returned by CPU_COUNT_S 
							
						 
						
							2018-04-14 22:24:34 +02:00  
				
					
						
							
							
								 
						
							
								7c861605b2 
								
							 
						 
						
							
							
								
								Catch invalid cpu count returned by CPU_COUNT_S  
							
							... 
							
							
							
							mips32 was seen to return zero here, driving nthreads to zero with subsequent fpe in blas_quickdivide 
							
						 
						
							2018-04-14 18:29:10 +02:00  
				
					
						
							
							
								 
						
							
								d636b418af 
								
							 
						 
						
							
							
								
								Merge pull request  #1504  from ararslan/aa/openbsd  
							
							... 
							
							
							
							Allow building on OpenBSD 
							
						 
						
							2018-04-04 15:26:46 +02:00  
				
					
						
							
							
								 
						
							
								a41d241a0e 
								
							 
						 
						
							
							
								
								Add support for DragonFly BSD  
							
							
							
						 
						
							2018-04-03 16:39:29 -07:00  
				
					
						
							
							
								 
						
							
								8da6b6ae52 
								
							 
						 
						
							
							
								
								Allow building on OpenBSD  
							
							... 
							
							
							
							With this change, OpenBLAS builds and all tests pass on OpenBSD 6.2
using Clang. Tested on x86-64 only, with and without DYNAMIC_ARCH=1. 
							
						 
						
							2018-04-02 10:48:22 -07:00  
				
					
						
							
							
								 
						
							
								01c4b82f04 
								
							 
						 
						
							
							
								
								Update memory.c  
							
							
							
						 
						
							2018-03-31 22:32:06 +02:00  
				
					
						
							
							
								 
						
							
								93db123f7e 
								
							 
						 
						
							
							
								
								Update memory.c  
							
							
							
						 
						
							2018-03-29 13:13:49 +02:00  
				
					
						
							
							
								 
						
							
								752fdb5dd8 
								
							 
						 
						
							
							
								
								Add workaround for old gcc and clang versions  
							
							... 
							
							
							
							Old gcc and clang do not handle constructor arguments, finally fix  #875  as discussed there, using the fedora patch 
							
						 
						
							2018-03-29 11:56:56 +02:00  
				
					
						
							
							
								 
						
							
								7646974227 
								
							 
						 
						
							
							
								
								Limit the additional locking from PRs 1052,1299 to non-OpenMP multithreading  
							
							
							
						 
						
							2018-02-21 11:45:33 +01:00  
				
					
						
							
							
								 
						
							
								8866e393a2 
								
							 
						 
						
							
							
								
								Revert "Add locks only for non-OPENMP multithreading"  
							
							
							
						 
						
							2018-02-20 17:17:12 +01:00  
				
					
						
							
							
								 
						
							
								3119b2ab4c 
								
							 
						 
						
							
							
								
								Add locks only for non-OPENMP multithreading  
							
							... 
							
							
							
							to migitate performance problems caused by #1052  and #1299  as seen in #1461  
							
						 
						
							2018-02-20 12:17:18 +01:00  
				
					
						
							
							
								 
						
							
								8f5f614615 
								
							 
						 
						
							
							
								
								On Cygwin use mmap instead of Windows native allocation functions, which are not fork-safe.  
							
							
							
						 
						
							2018-02-06 12:23:27 +01:00  
				
					
						
							
							
								 
						
							
								f5fc109fbd 
								
							 
						 
						
							
							
								
								Perform blas_thread_shutdown with pthread_atfork() on Cygwin  
							
							... 
							
							
							
							Even if we're directly using the win32 threading driver and not pthreads,
pthread_atfork still works fine to register a pre-fork handler, and is
necessary to restore the threading server to a pre-initialized state. 
							
						 
						
							2018-02-06 12:23:27 +01:00  
				
					
						
							
							
								 
						
							
								e5752ff9b3 
								
							 
						 
						
							
							
								
								take out unused variables  
							
							
							
						 
						
							2018-01-20 11:42:31 +01:00  
				
					
						
							
							
								 
						
							
								bfc2a88594 
								
							 
						 
						
							
							
								
								remove unused buffer  
							
							
							
						 
						
							2017-12-22 00:55:40 +01:00  
				
					
						
							
							
								 
						
							
								ba1f91f17b 
								
							 
						 
						
							
							
								
								Convert another caller of "allocation" to LOCK_COMMAND  
							
							... 
							
							
							
							... as the "allocation" code jumped to now does UNLOCK_COMMAND instead of blas_unlock 
							
						 
						
							2017-09-09 20:30:33 +02:00  
				
					
						
							
							
								 
						
							
								e882f3d6f3 
								
							 
						 
						
							
							
								
								Fix thread data race in memory.c  
							
							
							
						 
						
							2017-09-09 18:58:38 +02:00  
				
					
						
							
							
								 
						
							
								63cfa32691 
								
							 
						 
						
							
							
								
								Rework __GLIBC_PREREQ checks to avoid breaking non-glibc builds  
							
							
							
						 
						
							2017-07-31 21:02:43 +02:00  
				
					
						
							
							
								 
						
							
								c4af196a2d 
								
							 
						 
						
							
							
								
								Honor cgroup/cpuset limits when enumerating cpus  
							
							
							
						 
						
							2017-07-25 22:47:34 +02:00  
				
					
						
							
							
								 
						
							
								480e697681 
								
							 
						 
						
							
							
								
								Revert "Honor cgroup/cpuset limits when enumerating cpus" ( #1246 )  
							
							
							
						 
						
							2017-07-24 16:17:50 +02:00  
				
					
						
							
							
								 
						
							
								731c518cff 
								
							 
						 
						
							
							
								
								Add files via upload  
							
							
							
						 
						
							2017-07-11 18:42:39 +02:00  
				
					
						
							
							
								 
						
							
								29fc429d9a 
								
							 
						 
						
							
							
								
								Honor cgroup/cpuset constraints when enumerating cpus  
							
							
							
						 
						
							2017-07-11 18:27:33 +02:00  
				
					
						
							
							
								 
						
							
								65e56cb29d 
								
							 
						 
						
							
							
								
								Add 64bit support for Microsoft Visual Studio  
							
							
							
						 
						
							2017-06-21 13:38:22 -07:00  
				
					
						
							
							
								 
						
							
								59c97cfee4 
								
							 
						 
						
							
							
								
								memory: Fix buffer overflow when position == NUM_BUFFERS  
							
							
							
						 
						
							2017-05-05 17:47:03 +01:00  
				
					
						
							
							
								 
						
							
								5fecfe0f42 
								
							 
						 
						
							
							
								
								memory: switch loop condition around in blas_memory_free  
							
							... 
							
							
							
							Before this commit, the "position < NUM_BUFFERS" loop condition from
blas_memory_free will be completely optimized away by GCC. This is
because the condition can only be false after undefined behavior has
already been invoked (reading past the end of an array). As a
consequence of this bug, GCC also removes the subsequent if statement
and all the code after the error label because all of it is dead.
This commit switches the loop condition around so it works as intended. 
							
						 
						
							2017-05-05 16:01:58 +01:00  
				
					
						
							
							
								 
						
							
								4713e7c47f 
								
							 
						 
						
							
							
								
								ARM64: Add the VULCAN Target  
							
							
							
						 
						
							2017-01-10 15:01:17 +05:30  
				
					
						
							
							
								 
						
							
								51aa157e64 
								
							 
						 
						
							
							
								
								Relocate declaration of alloc_lock outside ifdef block  
							
							
							
						 
						
							2017-01-09 01:10:43 +01:00  
				
					
						
							
							
								 
						
							
								87c7d10b34 
								
							 
						 
						
							
							
								
								Fix thread data races detected by helgrind 3.12  
							
							... 
							
							
							
							Ref. #995 , may possibly help solve issues seen in 660,883 
							
						 
						
							2017-01-08 23:33:51 +01:00  
				
					
						
							
							
								 
						
							
								66c9a9b33d 
								
							 
						 
						
							
							
								
								Merge pull request  #981  from howard0su/develop  
							
							... 
							
							
							
							USE NPROCESSOR_CONF instaed of NPORCESSOR_ONLN 
							
						 
						
							2016-10-17 11:32:57 +08:00  
				
					
						
							
							
								 
						
							
								ff1da01476 
								
							 
						 
						
							
							
								
								USE NPROCESSOR_CONF instaed of NPORCESSOR_ONLN  
							
							... 
							
							
							
							to determine the number of CPU. In ARM platform,
online CPU will increasing when there is more workload.
while configure cpu is the max number of CPU. 
							
						 
						
							2016-10-13 12:37:50 +00:00  
				
					
						
							
							
								 
						
							
								ef52a9266b 
								
							 
						 
						
							
							
								
								Fixed   #979 . Patch for NetBSD.  
							
							
							
						 
						
							2016-10-13 10:17:07 +08:00  
				
					
						
							
							
								 
						
							
								aa744dfa59 
								
							 
						 
						
							
							
								
								Update memory.c  
							
							
							
						 
						
							2016-03-22 20:02:37 +08:00  
				
					
						
							
							
								 
						
							
								61cf8f74d9 
								
							 
						 
						
							
							
								
								Fix access violation on Windows while static linking  
							
							
							
						 
						
							2016-03-22 19:14:54 +08:00  
				
					
						
							
							
								 
						
							
								05196a8497 
								
							 
						 
						
							
							
								
								Refs  #716 . Only call getenv at init function.  
							
							
							
						 
						
							2016-03-09 12:50:07 -05:00  
				
					
						
							
							
								 
						
							
								6b85dbb6dc 
								
							 
						 
						
							
							
								
								Refs  #696 . Turn off stack limit setting on Linux.  
							
							... 
							
							
							
							I cannot reproduce SEGFAULT of lapack-test with default stack size
on ARM Linux. 
							
						 
						
							2016-02-24 14:21:42 -05:00  
				
					
						
							
							
								 
						
							
								f5df444ceb 
								
							 
						 
						
							
							
								
								Merge pull request  #762  from jeromerobert/bug760  
							
							... 
							
							
							
							Let openblas_get_num_threads return the number of active threads 
							
						 
						
							2016-01-26 08:45:16 -06:00  
				
					
						
							
							
								 
						
							
								aaa8551c57 
								
							 
						 
						
							
							
								
								Merge pull request  #749  from lotheac/illumos_fixes  
							
							... 
							
							
							
							illumos fixes 
							
						 
						
							2016-01-26 08:42:20 -06:00  
				
					
						
							
							
								 
						
							
								0d87c1ffb6 
								
							 
						 
						
							
							
								
								Let openblas_get_num_threads return the number of active threads  
							
							... 
							
							
							
							... not the number of allocated threads.
Close  #760  
							
						 
						
							2016-01-26 13:04:16 +01:00  
				
					
						
							
							
								 
						
							
								97cd4b8aee 
								
							 
						 
						
							
							
								
								illumos fixes to memory.c  
							
							
							
						 
						
							2016-01-22 18:55:43 +02:00  
				
					
						
							
							
								 
						
							
								0d22551a6b 
								
							 
						 
						
							
							
								
								increase the stack size limit in the constructor  
							
							
							
						 
						
							2015-11-20 09:23:01 +01:00  
				
					
						
							
							
								 
						
							
								fbc21266e6 
								
							 
						 
						
							
							
								
								Minor C code fixes in driver/  
							
							
							
						 
						
							2015-11-09 14:15:49 +05:30  
				
					
						
							
							
								 
						
							
								2feef49fa8 
								
							 
						 
						
							
							
								
								Merge branch 'develop' into cmake  
							
							... 
							
							
							
							Conflicts:
	driver/others/memory.c 
							
						 
						
							2015-10-26 14:54:34 -05:00  
				
					
						
							
							
								 
						
							
								1ce054fcb3 
								
							 
						 
						
							
							
								
								Refs  #669 . Fixed the build bug with gcc on Mac OS X.  
							
							
							
						 
						
							2015-10-22 11:07:35 -05:00  
				
					
						
							
							
								 
						
							
								94b125255f 
								
							 
						 
						
							
							
								
								Merge branch 'develop' into cmake  
							
							... 
							
							
							
							Conflicts:
	driver/others/memory.c 
							
						 
						
							2015-10-13 04:46:08 +08:00  
				
					
						
							
							
								 
						
							
								11ac4665c8 
								
							 
						 
						
							
							
								
								Fixed   #654 . Make sure the gotoblas_init function is run before all other static initializations.  
							
							
							
						 
						
							2015-10-05 14:14:32 -05:00