Example #1
0
void swap(Array2D& a, int i1, int j1, int i2, int j2)
{
	int val1 = a.getValueAt(i1, j1);
	int val2 = a.getValueAt(i2, j2);

	a.setValueAt(val2, i1, j1);
	a.setValueAt(val1, i2, j2);

}
Example #2
0
void EOTColumn(Array2D& a, int count, int columnNumber, int direction)
{
	int numOfRepeats = (int)ceil((double)count / 2);
	int i, chunk;

	chunk = CHUNKSIZE;
	int repeat1 = 2 * (count / 2) - 1; //pocet opakovani prvniho cyklu
	int repeat2 = 2 * (int)floor((double)((count - 1) / 2));

	//opakuj numOfRepeats x
	for (int j = 0; j < numOfRepeats; j++) {

		//paralelni blok s polem A a promennou chunk
		#pragma omp parallel num_threads(NUM_OF_THREAD) shared(a,count,chunk,repeat1,repeat2) private(i)
		{
			//licho-sude dvojce
		#pragma omp for schedule(dynamic,chunk)
			for (i = 0; i < repeat1; i += 2) {
				//compare and exchange
				int val1 = a.getValueAt(i, columnNumber);
				int val2 = a.getValueAt(i + 1, columnNumber);
				if (compare(val1, val2, direction) == false) { //pokud poradni neni spravne
					swap(a, i, columnNumber, i + 1, columnNumber);
				}
			}

			//sudo-liche dvojce
		#pragma omp for schedule(dynamic,chunk)
			for (i = 1; i < repeat2; i += 2) {
				//compare and exchange
				int val1 = a.getValueAt(i, columnNumber);
				int val2 = a.getValueAt(i + 1, columnNumber);
				if (compare(val1, val2, direction) == false) { //pokud poradni neni spravne
					swap(a, i, columnNumber, i + 1, columnNumber);
				}
			}
		} //end of paralel region
	}
}