コード例 #1
0
ファイル: TLMAlgorithm.cpp プロジェクト: markgoddard/tlm
// Secondary Thread Function
DWORD WINAPI WorkerThread(LPVOID *lpParam)
{
	int ThreadNumber = (int)(long long int)lpParam;
	int Set1 = 2*ThreadNumber-(ThreadNumber&0x01);
	int Set2 = (Set1+2)%Sets;
	int Index = 0;

	Msg_t MsgBuffer;

	hMutex[1][ThreadNumber] = CreateMutex(NULL, TRUE, NULL);

	WaitForSingleObject(hMutexMsg[ThreadNumber], INFINITE);
	Msg[ThreadNumber] = READY;
	ReleaseMutex(hMutexMsg[ThreadNumber]);

	while (1) {
		// Wait until a message has been posted
		WaitForSingleObject(hMutex[Index][ThreadNumber], INFINITE);
		++Index %= 3;

		// Retrieve the message
		MsgBuffer = Msg[ThreadNumber];
		Msg[ThreadNumber] = NO_MSG;

		switch (MsgBuffer) {
			case NO_MSG:
				printf("Thread %d received error\n", ThreadNumber+1);
				Sleep(2000);
				exit(1);
				break;
			case SCATTER_1:
				Scatter(Set1);
				break;
			case SCATTER_2:
				Scatter(Set2);
				break;
			case CONNECT:
				CopyNodeAdditions(Set1);
				CopyNodeAdditions(Set2);
				Connect(Set1);
				Connect(Set2);
				break;
			case END:
				ExitThread(0);
		}

		ReleaseMutex(hMutex[Index][ThreadNumber]);
		
		++Index %= 3;
	}
}
コード例 #2
0
MatrixXcf Circuit_Handler::get_Port_Scattering(){
	MatrixXcf S(num_of_nodes,num_of_nodes);
//	int srowscols = ports.size();
	MatrixXcf Scatter(num_of_ports,num_of_ports);
	S = calc_S();
	int m = 0;
	 for(vector<int>::iterator it = ports.begin(); it != ports.end(); ++it){
		int port1 = *it;
		int matrow = port1-1;	
		int n = 0;	
		for(vector<int>::iterator et = ports.begin(); et != ports.end(); ++et){		
			int port2 = *et;
			int matcol = port2-1; //offset for matrix
			Scatter(m,n) = S(matrow,matcol);
			++n;			
		}
		++m;
	}
	return Scatter;
}
コード例 #3
0
TEST(ResidualPlot, ResidualPlot2)
{
    TestPlot< ResidualPlot >("ResidualPlot2", []()
    {
        vec x = 2 + randn(100);
        vec y = 2 + 3 * square(x)  + 2 * randn(100);
        ResidualPlot f(x, y);
        f.SetOrder(1)
        .SetColour("g")
        .SetScatter(Scatter().SetSize(3.0))
        .SetLine(Line().SetLineWidth(5));
        return f;
    });
}
コード例 #4
0
ファイル: TLMAlgorithm.cpp プロジェクト: markgoddard/tlm
// Secondary Thread Function
DWORD WINAPI WorkerThread(LPVOID *lpParam)
{
	ThreadData_t *Data = (ThreadData_t*)lpParam;
	int x = Data->Index.X;
	int y = Data->Index.Y;
	int z = Data->Index.Z;
	HANDLE hEventArray[3];
	DWORD EventBuffer;

	hEventArray[0] = hScatterEvent[x][y][z];
	hEventArray[1] = hConnectEvent[x][y][z];
	hEventArray[2] = hEndEvent[x][y][z];

	// Tell the main thread the worker is ready
	SetEvent(hReadyEvent[x][y][z]);

	while (1) {
		// Wait until a message has been posted
		EventBuffer = WaitForMultipleObjects(3, hEventArray, false, INFINITE);

		switch (EventBuffer) {
			case SCATTER_EVENT:
				Scatter(Data);
				break;

			case CONNECT_EVENT:
				CopyNodeAdditions(Data);
				Connect(Data);
				break;

			case END_EVENT:
				ExitThread(0);
				break;

			default:
				printf("Thread %d received error",x);
				Sleep(2000);
				exit(1);
		}
		SetEvent(hReadyEvent[x][y][z]);
	}
}
コード例 #5
0
ファイル: p4graded-tcsiwula.c プロジェクト: tcsiwula/c_code
/* ========================================================================== */
int main(int argc, char* argv[])
{
    MPI_Comm comm;
    char generate_list_flag;
    int my_rank, global_list_size = 0, list_size = 0, p;
    int *my_list = NULL, *neighbors_list = NULL, *merge_list = NULL;
    Initialize_mpi(argc, argv, &comm, &p, &my_rank);
    Get_args(argc, argv, &global_list_size, &generate_list_flag, &list_size, p);

    Initializer(&my_list, &neighbors_list, &merge_list, list_size);

    Scatter(generate_list_flag, my_list, neighbors_list,
                merge_list, global_list_size, list_size, my_rank, comm);

    qsort(my_list, list_size, sizeof(int), Compare);

    Mpi_Bitonic_sort(my_rank, p, my_list, neighbors_list, list_size, comm);

    Finalizer(my_list, neighbors_list, merge_list);

    return 0;
}  /* main */