6 #ifndef CoinAbcHelperFunctions_H
7 #define CoinAbcHelperFunctions_H
21 #define abc_assert(condition) \
22 { if (!condition) {printf("abc_assert in %s at line %d - %s is false\n", \
23 __FILE__, __LINE__, __STRING(condition)); abort();} }
26 #define CILK_FOR_GRAINSIZE 128
29 #include "emmintrin.h"
31 #include <immintrin.h>
33 #include "avx2intrin.h"
43 #define UNROLL_SCATTER 2
44 #define INLINE_SCATTER 1
62 region[iRow] = regionValue - value * pivotValue;
64 #elif UNROLL_SCATTER==1
70 region[iRow] = regionValue - value * pivotValue;
77 region[iRow0] = regionValue0 - thisElement[j] * pivotValue;
78 region[iRow1] = regionValue1 - thisElement[j-1] * pivotValue;
80 #elif UNROLL_SCATTER==2
86 region[iRow] = regionValue - value * pivotValue;
95 region[iRow0] = regionValue0 - value0 * pivotValue;
96 region[iRow1] = regionValue1 - value1 * pivotValue;
99 #pragma cilk grainsize=CILK_FOR_GRAINSIZE
105 region[iRow0] = regionValue0 - thisElement[j] * pivotValue;
106 region[iRow1] = regionValue1 - thisElement[j-1] * pivotValue;
111 region[iRow2] = regionValue2 - thisElement[j-2] * pivotValue;
112 region[iRow3] = regionValue3 - thisElement[j-3] * pivotValue;
114 #elif UNROLL_SCATTER==3
119 switch(static_cast<unsigned int>(number)) {
123 iRow0 = thisIndex[0];
124 regionValue0 = region[iRow0];
125 region[iRow0] = regionValue0 - thisElement[0] * pivotValue;
128 iRow0 = thisIndex[0];
129 iRow1 = thisIndex[1];
130 regionValue0 = region[iRow0];
131 regionValue1 = region[iRow1];
132 region[iRow0] = regionValue0 - thisElement[0] * pivotValue;
133 region[iRow1] = regionValue1 - thisElement[1] * pivotValue;
136 iRow0 = thisIndex[0];
137 iRow1 = thisIndex[1];
138 regionValue0 = region[iRow0];
139 regionValue1 = region[iRow1];
140 region[iRow0] = regionValue0 - thisElement[0] * pivotValue;
141 region[iRow1] = regionValue1 - thisElement[1] * pivotValue;
142 iRow0 = thisIndex[2];
143 regionValue0 = region[iRow0];
144 region[iRow0] = regionValue0 - thisElement[2] * pivotValue;
147 iRow0 = thisIndex[0];
148 iRow1 = thisIndex[1];
149 regionValue0 = region[iRow0];
150 regionValue1 = region[iRow1];
151 region[iRow0] = regionValue0 - thisElement[0] * pivotValue;
152 region[iRow1] = regionValue1 - thisElement[1] * pivotValue;
153 iRow0 = thisIndex[2];
154 iRow1 = thisIndex[3];
155 regionValue0 = region[iRow0];
156 regionValue1 = region[iRow1];
157 region[iRow0] = regionValue0 - thisElement[2] * pivotValue;
158 region[iRow1] = regionValue1 - thisElement[3] * pivotValue;
161 iRow0 = thisIndex[0];
162 iRow1 = thisIndex[1];
163 regionValue0 = region[iRow0];
164 regionValue1 = region[iRow1];
165 region[iRow0] = regionValue0 - thisElement[0] * pivotValue;
166 region[iRow1] = regionValue1 - thisElement[1] * pivotValue;
167 iRow0 = thisIndex[2];
168 iRow1 = thisIndex[3];
169 regionValue0 = region[iRow0];
170 regionValue1 = region[iRow1];
171 region[iRow0] = regionValue0 - thisElement[2] * pivotValue;
172 region[iRow1] = regionValue1 - thisElement[3] * pivotValue;
173 iRow0 = thisIndex[4];
174 regionValue0 = region[iRow0];
175 region[iRow0] = regionValue0 - thisElement[4] * pivotValue;
178 iRow0 = thisIndex[0];
179 iRow1 = thisIndex[1];
180 regionValue0 = region[iRow0];
181 regionValue1 = region[iRow1];
182 region[iRow0] = regionValue0 - thisElement[0] * pivotValue;
183 region[iRow1] = regionValue1 - thisElement[1] * pivotValue;
184 iRow0 = thisIndex[2];
185 iRow1 = thisIndex[3];
186 regionValue0 = region[iRow0];
187 regionValue1 = region[iRow1];
188 region[iRow0] = regionValue0 - thisElement[2] * pivotValue;
189 region[iRow1] = regionValue1 - thisElement[3] * pivotValue;
190 iRow0 = thisIndex[4];
191 iRow1 = thisIndex[5];
192 regionValue0 = region[iRow0];
193 regionValue1 = region[iRow1];
194 region[iRow0] = regionValue0 - thisElement[4] * pivotValue;
195 region[iRow1] = regionValue1 - thisElement[5] * pivotValue;
198 iRow0 = thisIndex[0];
199 iRow1 = thisIndex[1];
200 regionValue0 = region[iRow0];
201 regionValue1 = region[iRow1];
202 region[iRow0] = regionValue0 - thisElement[0] * pivotValue;
203 region[iRow1] = regionValue1 - thisElement[1] * pivotValue;
204 iRow0 = thisIndex[2];
205 iRow1 = thisIndex[3];
206 regionValue0 = region[iRow0];
207 regionValue1 = region[iRow1];
208 region[iRow0] = regionValue0 - thisElement[2] * pivotValue;
209 region[iRow1] = regionValue1 - thisElement[3] * pivotValue;
210 iRow0 = thisIndex[4];
211 iRow1 = thisIndex[5];
212 regionValue0 = region[iRow0];
213 regionValue1 = region[iRow1];
214 region[iRow0] = regionValue0 - thisElement[4] * pivotValue;
215 region[iRow1] = regionValue1 - thisElement[5] * pivotValue;
216 iRow0 = thisIndex[6];
217 regionValue0 = region[iRow0];
218 region[iRow0] = regionValue0 - thisElement[6] * pivotValue;
221 iRow0 = thisIndex[0];
222 iRow1 = thisIndex[1];
223 regionValue0 = region[iRow0];
224 regionValue1 = region[iRow1];
225 region[iRow0] = regionValue0 - thisElement[0] * pivotValue;
226 region[iRow1] = regionValue1 - thisElement[1] * pivotValue;
227 iRow0 = thisIndex[2];
228 iRow1 = thisIndex[3];
229 regionValue0 = region[iRow0];
230 regionValue1 = region[iRow1];
231 region[iRow0] = regionValue0 - thisElement[2] * pivotValue;
232 region[iRow1] = regionValue1 - thisElement[3] * pivotValue;
233 iRow0 = thisIndex[4];
234 iRow1 = thisIndex[5];
235 regionValue0 = region[iRow0];
236 regionValue1 = region[iRow1];
237 region[iRow0] = regionValue0 - thisElement[4] * pivotValue;
238 region[iRow1] = regionValue1 - thisElement[5] * pivotValue;
239 iRow0 = thisIndex[6];
240 iRow1 = thisIndex[7];
241 regionValue0 = region[iRow0];
242 regionValue1 = region[iRow1];
243 region[iRow0] = regionValue0 - thisElement[6] * pivotValue;
244 region[iRow1] = regionValue1 - thisElement[7] * pivotValue;
252 region[iRow] = regionValue - value * pivotValue;
259 region[iRow0] = regionValue0 - thisElement[j] * pivotValue;
260 region[iRow1] = regionValue1 - thisElement[j-1] * pivotValue;
270 #if UNROLL_SCATTER==0
271 const int *
COIN_RESTRICT thisIndex =
reinterpret_cast<const int *
>(thisElement+number);
277 region[iRow] = regionValue - value * pivotValue;
279 #elif UNROLL_SCATTER==1
280 const int *
COIN_RESTRICT thisIndex =
reinterpret_cast<const int *
>(thisElement+number);
286 region[iRow] = regionValue - value * pivotValue;
293 region[iRow0] = regionValue0 - thisElement[j] * pivotValue;
294 region[iRow1] = regionValue1 - thisElement[j-1] * pivotValue;
296 #elif UNROLL_SCATTER==2
297 const int *
COIN_RESTRICT thisIndex =
reinterpret_cast<const int *
>(thisElement+number);
303 region[iRow] = regionValue - value * pivotValue;
312 region[iRow0] = regionValue0 - value0 * pivotValue;
313 region[iRow1] = regionValue1 - value1 * pivotValue;
318 __m256d pv = _mm256_broadcast_sd(&pivotValue);
320 __m256d elements=_mm256_loadu_pd(thisElement+j-3);
325 temp[0] = region[iRow0];
326 temp[1] = region[iRow1];
327 temp[2] = region[iRow2];
328 temp[3] = region[iRow3];
329 __m256d t0=_mm256_load_pd(temp);
331 _mm256_store_pd (temp, t0);
332 region[iRow0] = temp[0];
333 region[iRow1] = temp[1];
334 region[iRow2] = temp[2];
335 region[iRow3] = temp[3];
338 #pragma cilk grainsize=CILK_FOR_GRAINSIZE
344 region[iRow0] = regionValue0 - thisElement[j] * pivotValue;
345 region[iRow1] = regionValue1 - thisElement[j-1] * pivotValue;
350 region[iRow2] = regionValue2 - thisElement[j-2] * pivotValue;
351 region[iRow3] = regionValue3 - thisElement[j-3] * pivotValue;
354 #elif UNROLL_SCATTER==3
355 const int *
COIN_RESTRICT thisIndex =
reinterpret_cast<const int *
>(thisElement+number);
360 switch(static_cast<unsigned int>(number)) {
364 iRow0 = thisIndex[0];
365 regionValue0 = region[iRow0];
366 region[iRow0] = regionValue0 - thisElement[0] * pivotValue;
369 iRow0 = thisIndex[0];
370 iRow1 = thisIndex[1];
371 regionValue0 = region[iRow0];
372 regionValue1 = region[iRow1];
373 region[iRow0] = regionValue0 - thisElement[0] * pivotValue;
374 region[iRow1] = regionValue1 - thisElement[1] * pivotValue;
377 iRow0 = thisIndex[0];
378 iRow1 = thisIndex[1];
379 regionValue0 = region[iRow0];
380 regionValue1 = region[iRow1];
381 region[iRow0] = regionValue0 - thisElement[0] * pivotValue;
382 region[iRow1] = regionValue1 - thisElement[1] * pivotValue;
383 iRow0 = thisIndex[2];
384 regionValue0 = region[iRow0];
385 region[iRow0] = regionValue0 - thisElement[2] * pivotValue;
388 iRow0 = thisIndex[0];
389 iRow1 = thisIndex[1];
390 regionValue0 = region[iRow0];
391 regionValue1 = region[iRow1];
392 region[iRow0] = regionValue0 - thisElement[0] * pivotValue;
393 region[iRow1] = regionValue1 - thisElement[1] * pivotValue;
394 iRow0 = thisIndex[2];
395 iRow1 = thisIndex[3];
396 regionValue0 = region[iRow0];
397 regionValue1 = region[iRow1];
398 region[iRow0] = regionValue0 - thisElement[2] * pivotValue;
399 region[iRow1] = regionValue1 - thisElement[3] * pivotValue;
402 iRow0 = thisIndex[0];
403 iRow1 = thisIndex[1];
404 regionValue0 = region[iRow0];
405 regionValue1 = region[iRow1];
406 region[iRow0] = regionValue0 - thisElement[0] * pivotValue;
407 region[iRow1] = regionValue1 - thisElement[1] * pivotValue;
408 iRow0 = thisIndex[2];
409 iRow1 = thisIndex[3];
410 regionValue0 = region[iRow0];
411 regionValue1 = region[iRow1];
412 region[iRow0] = regionValue0 - thisElement[2] * pivotValue;
413 region[iRow1] = regionValue1 - thisElement[3] * pivotValue;
414 iRow0 = thisIndex[4];
415 regionValue0 = region[iRow0];
416 region[iRow0] = regionValue0 - thisElement[4] * pivotValue;
419 iRow0 = thisIndex[0];
420 iRow1 = thisIndex[1];
421 regionValue0 = region[iRow0];
422 regionValue1 = region[iRow1];
423 region[iRow0] = regionValue0 - thisElement[0] * pivotValue;
424 region[iRow1] = regionValue1 - thisElement[1] * pivotValue;
425 iRow0 = thisIndex[2];
426 iRow1 = thisIndex[3];
427 regionValue0 = region[iRow0];
428 regionValue1 = region[iRow1];
429 region[iRow0] = regionValue0 - thisElement[2] * pivotValue;
430 region[iRow1] = regionValue1 - thisElement[3] * pivotValue;
431 iRow0 = thisIndex[4];
432 iRow1 = thisIndex[5];
433 regionValue0 = region[iRow0];
434 regionValue1 = region[iRow1];
435 region[iRow0] = regionValue0 - thisElement[4] * pivotValue;
436 region[iRow1] = regionValue1 - thisElement[5] * pivotValue;
439 iRow0 = thisIndex[0];
440 iRow1 = thisIndex[1];
441 regionValue0 = region[iRow0];
442 regionValue1 = region[iRow1];
443 region[iRow0] = regionValue0 - thisElement[0] * pivotValue;
444 region[iRow1] = regionValue1 - thisElement[1] * pivotValue;
445 iRow0 = thisIndex[2];
446 iRow1 = thisIndex[3];
447 regionValue0 = region[iRow0];
448 regionValue1 = region[iRow1];
449 region[iRow0] = regionValue0 - thisElement[2] * pivotValue;
450 region[iRow1] = regionValue1 - thisElement[3] * pivotValue;
451 iRow0 = thisIndex[4];
452 iRow1 = thisIndex[5];
453 regionValue0 = region[iRow0];
454 regionValue1 = region[iRow1];
455 region[iRow0] = regionValue0 - thisElement[4] * pivotValue;
456 region[iRow1] = regionValue1 - thisElement[5] * pivotValue;
457 iRow0 = thisIndex[6];
458 regionValue0 = region[iRow0];
459 region[iRow0] = regionValue0 - thisElement[6] * pivotValue;
462 iRow0 = thisIndex[0];
463 iRow1 = thisIndex[1];
464 regionValue0 = region[iRow0];
465 regionValue1 = region[iRow1];
466 region[iRow0] = regionValue0 - thisElement[0] * pivotValue;
467 region[iRow1] = regionValue1 - thisElement[1] * pivotValue;
468 iRow0 = thisIndex[2];
469 iRow1 = thisIndex[3];
470 regionValue0 = region[iRow0];
471 regionValue1 = region[iRow1];
472 region[iRow0] = regionValue0 - thisElement[2] * pivotValue;
473 region[iRow1] = regionValue1 - thisElement[3] * pivotValue;
474 iRow0 = thisIndex[4];
475 iRow1 = thisIndex[5];
476 regionValue0 = region[iRow0];
477 regionValue1 = region[iRow1];
478 region[iRow0] = regionValue0 - thisElement[4] * pivotValue;
479 region[iRow1] = regionValue1 - thisElement[5] * pivotValue;
480 iRow0 = thisIndex[6];
481 iRow1 = thisIndex[7];
482 regionValue0 = region[iRow0];
483 regionValue1 = region[iRow1];
484 region[iRow0] = regionValue0 - thisElement[6] * pivotValue;
485 region[iRow1] = regionValue1 - thisElement[7] * pivotValue;
493 region[iRow] = regionValue - value * pivotValue;
500 region[iRow0] = regionValue0 - thisElement[j] * pivotValue;
501 region[iRow1] = regionValue1 - thisElement[j-1] * pivotValue;
511 #define coin_prefetch(mem) \
512 __asm__ __volatile__ ("prefetchnta %0" : : "m" (*(reinterpret_cast<char *>(mem))))
513 #define coin_prefetch_const(mem) \
514 __asm__ __volatile__ ("prefetchnta %0" : : "m" (*(reinterpret_cast<const char *>(mem))))
516 #define coin_prefetch(mem) \
517 __asm__ __volatile__ ("prefetch %0" : : "m" (*(reinterpret_cast<char *>(mem))))
518 #define coin_prefetch_const(mem) \
519 __asm__ __volatile__ ("prefetch %0" : : "m" (*(reinterpret_cast<const char *>(mem))))
523 #define coin_prefetch(mem)
524 #define coin_prefetch_const(mem)
526 #define NEW_CHUNK_SIZE 4
527 #define NEW_CHUNK_SIZE_INCREMENT (NEW_CHUNK_SIZE+NEW_CHUNK_SIZE/2);
528 #define NEW_CHUNK_SIZE_OFFSET (NEW_CHUNK_SIZE/2)
532 #define SCATTER_ATTRIBUTE
650 #if INLINE_SCATTER==0
664 #if UNROLL_SCATTER==0
670 region[iRow] = regionValue - value * pivotValue;
672 #elif UNROLL_SCATTER==1
679 region[iRow] = regionValue - value * pivotValue;
683 for ( ; number !=0; number-- ) {
686 work2[0] = region[iRow0];
687 work2[1] = region[iRow1];
689 work2[2] = region[iRow0];
690 work2[3] = region[iRow1];
692 __v4df b = __builtin_ia32_loadupd256(work2);
695 work2[0] -= thisElement[0] * pivotValue;
696 work2[1] -= thisElement[1] * pivotValue;
697 region[iRow0] = work2[0];
698 region[iRow1] = work2[1];
706 #define UNROLL_GATHER 0
707 #define INLINE_GATHER 1
711 const int * COIN_RESTRICT thisIndex,
716 const int * COIN_RESTRICT thisIndex,
724 value *= region[jRow];
733 #define UNROLL_MULTIPLY_INDEXED 0
734 #define INLINE_MULTIPLY_INDEXED 0
735 #if INLINE_MULTIPLY_INDEXED==0
737 const double * COIN_RESTRICT multiplier,
738 const int * COIN_RESTRICT thisIndex,
741 const long double * COIN_RESTRICT multiplier,
742 const int * COIN_RESTRICT thisIndex,
743 long double * COIN_RESTRICT region);
746 const double * COIN_RESTRICT multiplier,
747 const int * COIN_RESTRICT thisIndex,
755 void CoinAbcScale(
double * region,
double multiplier,
int size);
761 double * regionChanged,
double multiplier2);
763 void CoinAbcGetNorms(
const double * region,
int size,
double & norm1,
double & norm2);
765 void CoinAbcScatterTo(
const double * regionFrom,
double * regionTo,
const int * index,
int number);
767 void CoinAbcGatherFrom(
const double * regionFrom,
double * regionTo,
const int * index,
int number);
772 const int * indexList,
const int * indexScatter ,
int number);
778 void CoinAbcMemcpyLong(
unsigned char * array,
const unsigned char * arrayFrom,
int size);
782 void CoinAbcMemmove(
double * array,
const double * arrayFrom,
int size);
784 void CoinAbcMemmove(
unsigned char * array,
const unsigned char * arrayFrom,
int size);
788 int CoinAbcCompact(
int numberSections,
int alreadyDone,
double * array,
const int * starts,
const int * lengths);
790 int CoinAbcCompact(
int numberSections,
int alreadyDone,
int * array,
const int * starts,
const int * lengths);
792 #if ABC_CREATE_SCATTER_FUNCTION
798 assert (numberIn==1);
800 const int * COIN_RESTRICT thisColumn =
reinterpret_cast<const int *
>(element+1);
801 int iColumn0=thisColumn[0];
802 double value0=region[iColumn0];
803 value0 OPERATION multiplier*element[0];
804 region[iColumn0]=value0;
811 assert (numberIn==2);
813 const int * COIN_RESTRICT thisColumn =
reinterpret_cast<const int *
>(element+2);
814 #if NEW_CHUNK_SIZE==2
818 int iColumn0=thisColumn[0];
819 int iColumn1=thisColumn[1];
824 region[iColumn0]=value0;
825 region[iColumn1]=value1;
827 thisColumn =
reinterpret_cast<const int *
>(element);
830 #if NEW_CHUNK_SIZE==4
831 int iColumn0=thisColumn[0];
832 int iColumn1=thisColumn[1];
835 value0 OPERATION multiplier*element[0];
836 value1 OPERATION multiplier*element[1];
837 region[iColumn0]=value0;
838 region[iColumn1]=value1;
846 assert (numberIn==3);
848 const int * COIN_RESTRICT thisColumn =
reinterpret_cast<const int *
>(element+3);
852 #if NEW_CHUNK_SIZE==2
856 int iColumn0=thisColumn[0];
857 int iColumn1=thisColumn[1];
860 value0 OPERATION multiplier*element[0];
861 value1 OPERATION multiplier*element[1];
862 region[iColumn0]=value0;
863 region[iColumn1]=value1;
868 #if NEW_CHUNK_SIZE==2
869 int iColumn0=thisColumn[0];
870 double value0=region[iColumn0];
871 value0 OPERATION multiplier*element[0];
872 region[iColumn0]=value0;
874 int iColumn0=thisColumn[0];
875 int iColumn1=thisColumn[1];
876 int iColumn2=thisColumn[2];
879 double value2=region[iColumn2];
880 value2 OPERATION multiplier*element[2];
881 set_const_v2df(bb,multiplier);
882 temp[0]=region[iColumn0];
883 temp[1]=region[iColumn1];
884 region[iColumn2]=value2;
885 __v2df v0 = __builtin_ia32_loadupd (temp);
886 __v2df a = __builtin_ia32_loadupd (element);
889 __builtin_ia32_storeupd (temp, v0);
890 region[iColumn0]=temp[0];
891 region[iColumn1]=temp[1];
893 double value0=region[iColumn0];
894 double value1=region[iColumn1];
895 double value2=region[iColumn2];
896 value0 OPERATION multiplier*element[0];
897 value1 OPERATION multiplier*element[1];
898 value2 OPERATION multiplier*element[2];
899 region[iColumn0]=value0;
900 region[iColumn1]=value1;
901 region[iColumn2]=value2;
910 assert (numberIn==4);
912 const int * COIN_RESTRICT thisColumn =
reinterpret_cast<const int *
>(element+4);
919 #if NEW_CHUNK_SIZE==2
920 int iColumn0=thisColumn[0];
921 int iColumn1=thisColumn[1];
922 double value0=region[iColumn0];
923 double value1=region[iColumn1];
924 value0 OPERATION multiplier*element[0];
925 value1 OPERATION multiplier*element[1];
926 region[iColumn0]=value0;
927 region[iColumn1]=value1;
928 #elif NEW_CHUNK_SIZE==4
929 int iColumn0=thisColumn[0];
930 int iColumn1=thisColumn[1];
931 int iColumn2=thisColumn[2];
932 int iColumn3=thisColumn[3];
935 set_const_v2df(bb,multiplier);
936 temp[0]=region[iColumn0];
937 temp[1]=region[iColumn1];
938 temp[2]=region[iColumn2];
939 temp[3]=region[iColumn3];
940 __v2df v0 = __builtin_ia32_loadupd (temp);
941 __v2df v1 = __builtin_ia32_loadupd (temp+2);
942 __v2df a = __builtin_ia32_loadupd (element);
945 a = __builtin_ia32_loadupd (element+2);
948 __builtin_ia32_storeupd (temp, v0);
949 __builtin_ia32_storeupd (temp+2, v1);
950 region[iColumn0]=temp[0];
951 region[iColumn1]=temp[1];
952 region[iColumn2]=temp[2];
953 region[iColumn3]=temp[3];
955 double value0=region[iColumn0];
956 double value1=region[iColumn1];
957 double value2=region[iColumn2];
958 double value3=region[iColumn3];
959 value0 OPERATION multiplier*element[0];
960 value1 OPERATION multiplier*element[1];
961 value2 OPERATION multiplier*element[2];
962 value3 OPERATION multiplier*element[3];
963 region[iColumn0]=value0;
964 region[iColumn1]=value1;
965 region[iColumn2]=value2;
966 region[iColumn3]=value3;
980 assert (numberIn==5);
982 const int * COIN_RESTRICT thisColumn =
reinterpret_cast<const int *
>(element+5);
989 #if NEW_CHUNK_SIZE==2
990 int iColumn0=thisColumn[0];
991 int iColumn1=thisColumn[1];
992 double value0=region[iColumn0];
993 double value1=region[iColumn1];
994 value0 OPERATION multiplier*element[0];
995 value1 OPERATION multiplier*element[1];
996 region[iColumn0]=value0;
997 region[iColumn1]=value1;
998 #elif NEW_CHUNK_SIZE==4
999 int iColumn0=thisColumn[0];
1000 int iColumn1=thisColumn[1];
1001 int iColumn2=thisColumn[2];
1002 int iColumn3=thisColumn[3];
1005 set_const_v2df(bb,multiplier);
1006 temp[0]=region[iColumn0];
1007 temp[1]=region[iColumn1];
1008 temp[2]=region[iColumn2];
1009 temp[3]=region[iColumn3];
1010 __v2df v0 = __builtin_ia32_loadupd (temp);
1011 __v2df v1 = __builtin_ia32_loadupd (temp+2);
1012 __v2df a = __builtin_ia32_loadupd (element);
1015 a = __builtin_ia32_loadupd (element+2);
1018 __builtin_ia32_storeupd (temp, v0);
1019 __builtin_ia32_storeupd (temp+2, v1);
1020 region[iColumn0]=temp[0];
1021 region[iColumn1]=temp[1];
1022 region[iColumn2]=temp[2];
1023 region[iColumn3]=temp[3];
1025 double value0=region[iColumn0];
1026 double value1=region[iColumn1];
1027 double value2=region[iColumn2];
1028 double value3=region[iColumn3];
1029 value0 OPERATION multiplier*element[0];
1030 value1 OPERATION multiplier*element[1];
1031 value2 OPERATION multiplier*element[2];
1032 value3 OPERATION multiplier*element[3];
1033 region[iColumn0]=value0;
1034 region[iColumn1]=value1;
1035 region[iColumn2]=value2;
1036 region[iColumn3]=value3;
1044 int iColumn0=thisColumn[0];
1045 double value0=region[iColumn0];
1046 value0 OPERATION multiplier*element[0];
1047 region[iColumn0]=value0;
1054 assert (numberIn==6);
1056 const int * COIN_RESTRICT thisColumn =
reinterpret_cast<const int *
>(element+6);
1063 #if NEW_CHUNK_SIZE==2
1064 int iColumn0=thisColumn[0];
1065 int iColumn1=thisColumn[1];
1066 double value0=region[iColumn0];
1067 double value1=region[iColumn1];
1068 value0 OPERATION multiplier*element[0];
1069 value1 OPERATION multiplier*element[1];
1070 region[iColumn0]=value0;
1071 region[iColumn1]=value1;
1072 #elif NEW_CHUNK_SIZE==4
1073 int iColumn0=thisColumn[0];
1074 int iColumn1=thisColumn[1];
1075 int iColumn2=thisColumn[2];
1076 int iColumn3=thisColumn[3];
1079 set_const_v2df(bb,multiplier);
1080 temp[0]=region[iColumn0];
1081 temp[1]=region[iColumn1];
1082 temp[2]=region[iColumn2];
1083 temp[3]=region[iColumn3];
1084 __v2df v0 = __builtin_ia32_loadupd (temp);
1085 __v2df v1 = __builtin_ia32_loadupd (temp+2);
1086 __v2df a = __builtin_ia32_loadupd (element);
1089 a = __builtin_ia32_loadupd (element+2);
1092 __builtin_ia32_storeupd (temp, v0);
1093 __builtin_ia32_storeupd (temp+2, v1);
1094 region[iColumn0]=temp[0];
1095 region[iColumn1]=temp[1];
1096 region[iColumn2]=temp[2];
1097 region[iColumn3]=temp[3];
1099 double value0=region[iColumn0];
1100 double value1=region[iColumn1];
1101 double value2=region[iColumn2];
1102 double value3=region[iColumn3];
1103 value0 OPERATION multiplier*element[0];
1104 value1 OPERATION multiplier*element[1];
1105 value2 OPERATION multiplier*element[2];
1106 value3 OPERATION multiplier*element[3];
1107 region[iColumn0]=value0;
1108 region[iColumn1]=value1;
1109 region[iColumn2]=value2;
1110 region[iColumn3]=value3;
1118 #if NEW_CHUNK_SIZE==4
1119 int iColumn0=thisColumn[0];
1120 int iColumn1=thisColumn[1];
1121 double value0=region[iColumn0];
1122 double value1=region[iColumn1];
1123 value0 OPERATION multiplier*element[0];
1124 value1 OPERATION multiplier*element[1];
1125 region[iColumn0]=value0;
1126 region[iColumn1]=value1;
1134 assert (numberIn==7);
1136 const int * COIN_RESTRICT thisColumn =
reinterpret_cast<const int *
>(element+7);
1143 #if NEW_CHUNK_SIZE==2
1144 int iColumn0=thisColumn[0];
1145 int iColumn1=thisColumn[1];
1146 double value0=region[iColumn0];
1147 double value1=region[iColumn1];
1148 value0 OPERATION multiplier*element[0];
1149 value1 OPERATION multiplier*element[1];
1150 region[iColumn0]=value0;
1151 region[iColumn1]=value1;
1152 #elif NEW_CHUNK_SIZE==4
1153 int iColumn0=thisColumn[0];
1154 int iColumn1=thisColumn[1];
1155 int iColumn2=thisColumn[2];
1156 int iColumn3=thisColumn[3];
1159 set_const_v2df(bb,multiplier);
1160 temp[0]=region[iColumn0];
1161 temp[1]=region[iColumn1];
1162 temp[2]=region[iColumn2];
1163 temp[3]=region[iColumn3];
1164 __v2df v0 = __builtin_ia32_loadupd (temp);
1165 __v2df v1 = __builtin_ia32_loadupd (temp+2);
1166 __v2df a = __builtin_ia32_loadupd (element);
1169 a = __builtin_ia32_loadupd (element+2);
1172 __builtin_ia32_storeupd (temp, v0);
1173 __builtin_ia32_storeupd (temp+2, v1);
1174 region[iColumn0]=temp[0];
1175 region[iColumn1]=temp[1];
1176 region[iColumn2]=temp[2];
1177 region[iColumn3]=temp[3];
1179 double value0=region[iColumn0];
1180 double value1=region[iColumn1];
1181 double value2=region[iColumn2];
1182 double value3=region[iColumn3];
1183 value0 OPERATION multiplier*element[0];
1184 value1 OPERATION multiplier*element[1];
1185 value2 OPERATION multiplier*element[2];
1186 value3 OPERATION multiplier*element[3];
1187 region[iColumn0]=value0;
1188 region[iColumn1]=value1;
1189 region[iColumn2]=value2;
1190 region[iColumn3]=value3;
1198 #if NEW_CHUNK_SIZE==2
1199 int iColumn0=thisColumn[0];
1200 double value0=region[iColumn0];
1201 value0 OPERATION multiplier*element[0];
1202 region[iColumn0]=value0;
1204 int iColumn0=thisColumn[0];
1205 int iColumn1=thisColumn[1];
1206 int iColumn2=thisColumn[2];
1207 double value0=region[iColumn0];
1208 double value1=region[iColumn1];
1209 double value2=region[iColumn2];
1210 value0 OPERATION multiplier*element[0];
1211 value1 OPERATION multiplier*element[1];
1212 value2 OPERATION multiplier*element[2];
1213 region[iColumn0]=value0;
1214 region[iColumn1]=value1;
1215 region[iColumn2]=value2;
1223 assert (numberIn==8);
1225 const int * COIN_RESTRICT thisColumn =
reinterpret_cast<const int *
>(element+8);
1232 #if NEW_CHUNK_SIZE==2
1233 int iColumn0=thisColumn[0];
1234 int iColumn1=thisColumn[1];
1235 double value0=region[iColumn0];
1236 double value1=region[iColumn1];
1237 value0 OPERATION multiplier*element[0];
1238 value1 OPERATION multiplier*element[1];
1239 region[iColumn0]=value0;
1240 region[iColumn1]=value1;
1241 #elif NEW_CHUNK_SIZE==4
1242 int iColumn0=thisColumn[0];
1243 int iColumn1=thisColumn[1];
1244 int iColumn2=thisColumn[2];
1245 int iColumn3=thisColumn[3];
1248 set_const_v2df(bb,multiplier);
1249 temp[0]=region[iColumn0];
1250 temp[1]=region[iColumn1];
1251 temp[2]=region[iColumn2];
1252 temp[3]=region[iColumn3];
1253 __v2df v0 = __builtin_ia32_loadupd (temp);
1254 __v2df v1 = __builtin_ia32_loadupd (temp+2);
1255 __v2df a = __builtin_ia32_loadupd (element);
1258 a = __builtin_ia32_loadupd (element+2);
1261 __builtin_ia32_storeupd (temp, v0);
1262 __builtin_ia32_storeupd (temp+2, v1);
1263 region[iColumn0]=temp[0];
1264 region[iColumn1]=temp[1];
1265 region[iColumn2]=temp[2];
1266 region[iColumn3]=temp[3];
1268 double value0=region[iColumn0];
1269 double value1=region[iColumn1];
1270 double value2=region[iColumn2];
1271 double value3=region[iColumn3];
1272 value0 OPERATION multiplier*element[0];
1273 value1 OPERATION multiplier*element[1];
1274 value2 OPERATION multiplier*element[2];
1275 value3 OPERATION multiplier*element[3];
1276 region[iColumn0]=value0;
1277 region[iColumn1]=value1;
1278 region[iColumn2]=value2;
1279 region[iColumn3]=value3;
1292 assert ((numberIn&3)==0);
1293 const int * COIN_RESTRICT thisColumn =
reinterpret_cast<const int *
>(element+numberIn);
1301 #if NEW_CHUNK_SIZE==2
1302 int iColumn0=thisColumn[0];
1303 int iColumn1=thisColumn[1];
1304 double value0=region[iColumn0];
1305 double value1=region[iColumn1];
1306 value0 OPERATION multiplier*element[0];
1307 value1 OPERATION multiplier*element[1];
1308 region[iColumn0]=value0;
1309 region[iColumn1]=value1;
1310 #elif NEW_CHUNK_SIZE==4
1311 int iColumn0=thisColumn[0];
1312 int iColumn1=thisColumn[1];
1313 int iColumn2=thisColumn[2];
1314 int iColumn3=thisColumn[3];
1317 set_const_v2df(bb,multiplier);
1318 temp[0]=region[iColumn0];
1319 temp[1]=region[iColumn1];
1320 temp[2]=region[iColumn2];
1321 temp[3]=region[iColumn3];
1322 __v2df v0 = __builtin_ia32_loadupd (temp);
1323 __v2df v1 = __builtin_ia32_loadupd (temp+2);
1324 __v2df a = __builtin_ia32_loadupd (element);
1327 a = __builtin_ia32_loadupd (element+2);
1330 __builtin_ia32_storeupd (temp, v0);
1331 __builtin_ia32_storeupd (temp+2, v1);
1332 region[iColumn0]=temp[0];
1333 region[iColumn1]=temp[1];
1334 region[iColumn2]=temp[2];
1335 region[iColumn3]=temp[3];
1337 double value0=region[iColumn0];
1338 double value1=region[iColumn1];
1339 double value2=region[iColumn2];
1340 double value3=region[iColumn3];
1341 value0 OPERATION multiplier*element[0];
1342 value1 OPERATION multiplier*element[1];
1343 value2 OPERATION multiplier*element[2];
1344 value3 OPERATION multiplier*element[3];
1345 region[iColumn0]=value0;
1346 region[iColumn1]=value1;
1347 region[iColumn2]=value2;
1348 region[iColumn3]=value3;
1361 assert ((numberIn&3)==1);
1362 const int * COIN_RESTRICT thisColumn =
reinterpret_cast<const int *
>(element+numberIn);
1370 #if NEW_CHUNK_SIZE==2
1371 int iColumn0=thisColumn[0];
1372 int iColumn1=thisColumn[1];
1373 double value0=region[iColumn0];
1374 double value1=region[iColumn1];
1375 value0 OPERATION multiplier*element[0];
1376 value1 OPERATION multiplier*element[1];
1377 region[iColumn0]=value0;
1378 region[iColumn1]=value1;
1379 #elif NEW_CHUNK_SIZE==4
1380 int iColumn0=thisColumn[0];
1381 int iColumn1=thisColumn[1];
1382 int iColumn2=thisColumn[2];
1383 int iColumn3=thisColumn[3];
1386 set_const_v2df(bb,multiplier);
1387 temp[0]=region[iColumn0];
1388 temp[1]=region[iColumn1];
1389 temp[2]=region[iColumn2];
1390 temp[3]=region[iColumn3];
1391 __v2df v0 = __builtin_ia32_loadupd (temp);
1392 __v2df v1 = __builtin_ia32_loadupd (temp+2);
1393 __v2df a = __builtin_ia32_loadupd (element);
1396 a = __builtin_ia32_loadupd (element+2);
1399 __builtin_ia32_storeupd (temp, v0);
1400 __builtin_ia32_storeupd (temp+2, v1);
1401 region[iColumn0]=temp[0];
1402 region[iColumn1]=temp[1];
1403 region[iColumn2]=temp[2];
1404 region[iColumn3]=temp[3];
1406 double value0=region[iColumn0];
1407 double value1=region[iColumn1];
1408 double value2=region[iColumn2];
1409 double value3=region[iColumn3];
1410 value0 OPERATION multiplier*element[0];
1411 value1 OPERATION multiplier*element[1];
1412 value2 OPERATION multiplier*element[2];
1413 value3 OPERATION multiplier*element[3];
1414 region[iColumn0]=value0;
1415 region[iColumn1]=value1;
1416 region[iColumn2]=value2;
1417 region[iColumn3]=value3;
1425 int iColumn0=thisColumn[0];
1426 double value0=region[iColumn0];
1427 value0 OPERATION multiplier*element[0];
1428 region[iColumn0]=value0;
1434 assert ((numberIn&3)==2);
1435 const int * COIN_RESTRICT thisColumn =
reinterpret_cast<const int *
>(element+numberIn);
1443 #if NEW_CHUNK_SIZE==2
1444 int iColumn0=thisColumn[0];
1445 int iColumn1=thisColumn[1];
1446 double value0=region[iColumn0];
1447 double value1=region[iColumn1];
1448 value0 OPERATION multiplier*element[0];
1449 value1 OPERATION multiplier*element[1];
1450 region[iColumn0]=value0;
1451 region[iColumn1]=value1;
1452 #elif NEW_CHUNK_SIZE==4
1453 int iColumn0=thisColumn[0];
1454 int iColumn1=thisColumn[1];
1455 int iColumn2=thisColumn[2];
1456 int iColumn3=thisColumn[3];
1459 set_const_v2df(bb,multiplier);
1460 temp[0]=region[iColumn0];
1461 temp[1]=region[iColumn1];
1462 temp[2]=region[iColumn2];
1463 temp[3]=region[iColumn3];
1464 __v2df v0 = __builtin_ia32_loadupd (temp);
1465 __v2df v1 = __builtin_ia32_loadupd (temp+2);
1466 __v2df a = __builtin_ia32_loadupd (element);
1469 a = __builtin_ia32_loadupd (element+2);
1472 __builtin_ia32_storeupd (temp, v0);
1473 __builtin_ia32_storeupd (temp+2, v1);
1474 region[iColumn0]=temp[0];
1475 region[iColumn1]=temp[1];
1476 region[iColumn2]=temp[2];
1477 region[iColumn3]=temp[3];
1479 double value0=region[iColumn0];
1480 double value1=region[iColumn1];
1481 double value2=region[iColumn2];
1482 double value3=region[iColumn3];
1483 value0 OPERATION multiplier*element[0];
1484 value1 OPERATION multiplier*element[1];
1485 value2 OPERATION multiplier*element[2];
1486 value3 OPERATION multiplier*element[3];
1487 region[iColumn0]=value0;
1488 region[iColumn1]=value1;
1489 region[iColumn2]=value2;
1490 region[iColumn3]=value3;
1498 #if NEW_CHUNK_SIZE==4
1499 int iColumn0=thisColumn[0];
1500 int iColumn1=thisColumn[1];
1501 double value0=region[iColumn0];
1502 double value1=region[iColumn1];
1503 value0 OPERATION multiplier*element[0];
1504 value1 OPERATION multiplier*element[1];
1505 region[iColumn0]=value0;
1506 region[iColumn1]=value1;
1513 assert ((numberIn&3)==3);
1514 const int * COIN_RESTRICT thisColumn =
reinterpret_cast<const int *
>(element+numberIn);
1522 #if NEW_CHUNK_SIZE==2
1523 int iColumn0=thisColumn[0];
1524 int iColumn1=thisColumn[1];
1525 double value0=region[iColumn0];
1526 double value1=region[iColumn1];
1527 value0 OPERATION multiplier*element[0];
1528 value1 OPERATION multiplier*element[1];
1529 region[iColumn0]=value0;
1530 region[iColumn1]=value1;
1531 #elif NEW_CHUNK_SIZE==4
1532 int iColumn0=thisColumn[0];
1533 int iColumn1=thisColumn[1];
1534 int iColumn2=thisColumn[2];
1535 int iColumn3=thisColumn[3];
1538 set_const_v2df(bb,multiplier);
1539 temp[0]=region[iColumn0];
1540 temp[1]=region[iColumn1];
1541 temp[2]=region[iColumn2];
1542 temp[3]=region[iColumn3];
1543 __v2df v0 = __builtin_ia32_loadupd (temp);
1544 __v2df v1 = __builtin_ia32_loadupd (temp+2);
1545 __v2df a = __builtin_ia32_loadupd (element);
1548 a = __builtin_ia32_loadupd (element+2);
1551 __builtin_ia32_storeupd (temp, v0);
1552 __builtin_ia32_storeupd (temp+2, v1);
1553 region[iColumn0]=temp[0];
1554 region[iColumn1]=temp[1];
1555 region[iColumn2]=temp[2];
1556 region[iColumn3]=temp[3];
1558 double value0=region[iColumn0];
1559 double value1=region[iColumn1];
1560 double value2=region[iColumn2];
1561 double value3=region[iColumn3];
1562 value0 OPERATION multiplier*element[0];
1563 value1 OPERATION multiplier*element[1];
1564 value2 OPERATION multiplier*element[2];
1565 value3 OPERATION multiplier*element[3];
1566 region[iColumn0]=value0;
1567 region[iColumn1]=value1;
1568 region[iColumn2]=value2;
1569 region[iColumn3]=value3;
1577 #if NEW_CHUNK_SIZE==2
1578 int iColumn0=thisColumn[0];
1579 double value0=region[iColumn0];
1580 value0 OPERATION multiplier*element[0];
1581 region[iColumn0]=value0;
1583 int iColumn0=thisColumn[0];
1584 int iColumn1=thisColumn[1];
1585 int iColumn2=thisColumn[2];
1586 double value0=region[iColumn0];
1587 double value1=region[iColumn1];
1588 double value2=region[iColumn2];
1589 value0 OPERATION multiplier*element[0];
1590 value1 OPERATION multiplier*element[1];
1591 value2 OPERATION multiplier*element[2];
1592 region[iColumn0]=value0;
1593 region[iColumn1]=value1;
1594 region[iColumn2]=value2;
#define coin_prefetch(mem)
void(* scatterUpdate)(int, CoinFactorizationDouble, const CoinFactorizationDouble *, double *) SCATTER_ATTRIBUTE
void CoinAbcScatterUpdate4Add(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
void CoinAbcScatterUpdate5Subtract(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
scatterUpdate functionPointer
void CoinAbcScatterUpdate4NPlus3Subtract(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
void CoinAbcScatterUpdate7Subtract(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
void CoinAbcScatterUpdate4N(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
double CoinAbcMaximumAbsElement(const double *region, int size)
void CoinAbcScatterUpdate4NAdd(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
void CoinAbcScatterUpdate4NPlus2Subtract(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
void CoinAbcScatterTo(const double *regionFrom, double *regionTo, const int *index, int number)
regionTo[index[i]]=regionFrom[i]
void CoinAbcReciprocal(double *array, int n, const double *input)
void CoinAbcSetElements(double *region, int size, double value)
void CoinAbcGetNorms(const double *region, int size, double &norm1, double &norm2)
void CoinAbcScatterUpdate5Add(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
#define SCATTER_ATTRIBUTE
void CoinAbcScatterUpdate5(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
void CoinAbcScatterUpdate2(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
void CoinAbcScatterUpdate4NPlus1Add(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
void CoinAbcMemcpyLong(double *array, const double *arrayFrom, int size)
void CoinAbcScatterUpdate2Subtract(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
void CoinAbcScatterUpdate1Add(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
void CoinAbcScatterUpdate8Add(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
#define coin_prefetch_const(mem)
void CoinAbcMultiplyIndexed(int number, const double *COIN_RESTRICT multiplier, const int *COIN_RESTRICT thisIndex, CoinFactorizationDouble *COIN_RESTRICT region)
void ABC_INLINE CoinAbcScatterUpdate(int number, CoinFactorizationDouble pivotValue, const CoinFactorizationDouble *COIN_RESTRICT thisElement, const int *COIN_RESTRICT thisIndex, CoinFactorizationDouble *COIN_RESTRICT region)
void CoinAbcScatterUpdate3Add(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
void CoinAbcScatterUpdate3(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
void CoinAbcScatterUpdate2Add(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
void CoinAbcScatterUpdate0(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
typedef void(COINLINKAGE_CB *clp_callback)(Clp_Simplex *model
typedef for user call back.
void CoinAbcScatterUpdate8Subtract(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
void CoinAbcScatterUpdate6Subtract(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
void CoinAbcMinMaxAbsNormalValues(const double *region, int size, double &minimum, double &maximum)
double CoinFactorizationDouble
void CoinAbcScale(double *region, double multiplier, int size)
void CoinAbcScatterZeroTo(double *regionTo, const int *index, int number)
regionTo[index[i]]=0.0
void CoinAbcScatterUpdate4NPlus1Subtract(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
void CoinAbcScatterUpdate4NPlus2(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
void CoinAbcScatterUpdate6(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
void CoinAbcScatterUpdate4NPlus1(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
double CoinAbcInnerProduct(const double *region1, int size, const double *region2)
int CoinAbcCompact(int numberSections, int alreadyDone, double *array, const int *starts, const int *lengths)
This compacts several sections and zeroes out end (returns number)
void CoinAbcScatterUpdate3Subtract(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
void CoinAbcScatterUpdate1Subtract(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
void CoinAbcScatterUpdate4Subtract(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
CoinFactorizationDouble ABC_INLINE CoinAbcGatherUpdate(CoinSimplexInt number, const CoinFactorizationDouble *COIN_RESTRICT thisElement, const int *COIN_RESTRICT thisIndex, CoinFactorizationDouble *COIN_RESTRICT region)
void CoinAbcScatterUpdate6Add(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
#define NEW_CHUNK_SIZE_INCREMENT
void CoinAbcMultiplyAdd(const double *region1, int size, double multiplier1, double *regionChanged, double multiplier2)
void CoinAbcScatterUpdate1(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
void CoinAbcScatterUpdate7Add(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
void CoinAbcMemset0Long(double *array, int size)
void CoinAbcScatterUpdate8(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
void CoinAbcScaleNormalValues(double *region, double multiplier, double killIfLessThanThis, int size)
void CoinAbcInverseSqrts(double *array, int n)
array[i]=1.0/sqrt(array[i])
void CoinAbcScatterUpdate7(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
void CoinAbcScatterUpdate4NPlus2Add(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
void CoinAbcScatterUpdate4NPlus3Add(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
void CoinAbcScatterToList(const double *regionFrom, double *regionTo, const int *indexList, const int *indexScatter, int number)
regionTo[indexScatter[indexList[i]]]=regionFrom[indexList[i]]
void CoinAbcScatterUpdate4NPlus3(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
void CoinAbcMemmove(double *array, const double *arrayFrom, int size)
void CoinAbcScatterUpdate4NSubtract(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
void CoinAbcGatherFrom(const double *regionFrom, double *regionTo, const int *index, int number)
regionTo[i]=regionFrom[index[i]]
void CoinAbcMinMaxAbsElement(const double *region, int size, double &minimum, double &maximum)
void CoinAbcMemmoveAndZero(double *array, double *arrayFrom, int size)
This moves down and zeroes out end.
void CoinAbcScatterUpdate4(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
double CoinAbcMaximumAbsElementAndScale(double *region, double multiplier, int size)
maximum fabs(region[i]) and then region[i]*=multiplier
#define NEW_CHUNK_SIZE_OFFSET