/** * Should software C1e be enabled * * @param[in] PlatformConfig Contains the runtime modifiable feature input data. * @param[in] StdHeader Config Handle for library, services. * * @retval TRUE SW C1e is supported. * @retval FALSE SW C1e not supported. * */ BOOLEAN STATIC IsSwC1eFeatureEnabled ( IN PLATFORM_CONFIGURATION *PlatformConfig, IN AMD_CONFIG_PARAMS *StdHeader ) { BOOLEAN IsEnabled; AP_MAILBOXES ApMailboxes; SW_C1E_FAMILY_SERVICES *SwFamilyServices; ASSERT (PlatformConfig->C1eMode < MaxC1eMode); IsEnabled = FALSE; // Check whether software C1e is enabled only if hardware C1e is not supported or if the platform specifically // uses C1eModeSoftwareDeprecated. if ((PlatformConfig->C1eMode == C1eModeSoftwareDeprecated) || ((PlatformConfig->C1eMode == C1eModeHardwareSoftwareDeprecated) && (!IsFeatureEnabled (HardwareC1e, PlatformConfig, StdHeader)))) { ASSERT ((PlatformConfig->C1ePlatformData1 < 0x10000) && (PlatformConfig->C1ePlatformData1 != 0)); ASSERT (PlatformConfig->C1ePlatformData2 < 0x100); if ((PlatformConfig->C1ePlatformData1 != 0) && (PlatformConfig->C1ePlatformData1 < 0xFFFE) && (PlatformConfig->C1ePlatformData2 < 0xFF)) { if (!IsNonCoherentHt1 (StdHeader)) { if (GetNumberOfProcessors (StdHeader) == 1) { GetApMailbox (&ApMailboxes.ApMailInfo.Info, StdHeader); if (ApMailboxes.ApMailInfo.Fields.ModuleType == 0) { GetFeatureServicesOfCurrentCore (&SwC1eFamilyServiceTable, &SwFamilyServices, StdHeader); if (SwFamilyServices != NULL) { IsEnabled = SwFamilyServices->IsSwC1eSupported (SwFamilyServices, StdHeader); } } } } } } return IsEnabled; }
/** * Check to see if the input CPU supports HT Assist. * * @param[in] L3FeatureServices L3 Feature family services. * @param[in] PlatformConfig Contains the runtime modifiable feature input data. * @param[in] StdHeader Config Handle for library, services. * * @retval TRUE HT Assist is supported. * @retval FALSE HT Assist cannot be enabled. * */ BOOLEAN STATIC F10IsHtAssistSupported ( IN L3_FEATURE_FAMILY_SERVICES *L3FeatureServices, IN PLATFORM_CONFIGURATION *PlatformConfig, IN AMD_CONFIG_PARAMS *StdHeader ) { BOOLEAN IsSupported; UINT32 CpuCount; AP_MAILBOXES ApMailboxes; IsSupported = FALSE; if (PlatformConfig->PlatformProfile.UseHtAssist) { CpuCount = GetNumberOfProcessors (StdHeader); ASSERT (CpuCount != 0); if (CpuCount == 1) { GetApMailbox (&ApMailboxes.ApMailInfo.Info, StdHeader); if (ApMailboxes.ApMailInfo.Fields.ModuleType != 0) { IsSupported = TRUE; } } else if (CpuCount > 1) { IsSupported = TRUE; } } return IsSupported; }
/** * Should hardware C1e be enabled * * @param[in] PlatformConfig Contains the runtime modifiable feature input data. * @param[in] StdHeader Config Handle for library, services. * * @retval TRUE HW C1e is supported. * @retval FALSE HW C1e cannot be enabled. * */ BOOLEAN STATIC IsHwC1eFeatureEnabled ( IN PLATFORM_CONFIGURATION *PlatformConfig, IN AMD_CONFIG_PARAMS *StdHeader ) { BOOLEAN IsEnabled; AP_MAILBOXES ApMailboxes; HW_C1E_FAMILY_SERVICES *FamilyServices; ASSERT (PlatformConfig->C1eMode < MaxC1eMode); IsEnabled = FALSE; if (PlatformConfig->C1eMode == C1eModeHardware) { ASSERT (PlatformConfig->C1ePlatformData < 0x10000); ASSERT (PlatformConfig->C1ePlatformData != 0); if ((PlatformConfig->C1ePlatformData != 0) && (PlatformConfig->C1ePlatformData < 0xFFFE)) { if (GetNumberOfProcessors (StdHeader) == 1) { GetApMailbox (&ApMailboxes.ApMailInfo.Info, StdHeader); if (ApMailboxes.ApMailInfo.Fields.ModuleType == 0) { GetFeatureServicesOfCurrentCore (&HwC1eFamilyServiceTable, (CONST VOID **)&FamilyServices, StdHeader); if (FamilyServices != NULL) { IsEnabled = FamilyServices->IsHwC1eSupported (FamilyServices, StdHeader); } } } } } return IsEnabled; }
void CAOGenerator::GenerateByTexel() { if (m_eAOMethod == AOMETHOD_RAYTRACE) RaytraceSetupThreads(); float flTotalArea = 0; for (size_t m = 0; m < m_pScene->GetNumMeshes(); m++) { CConversionMesh* pMesh = m_pScene->GetMesh(m); for (size_t f = 0; f < pMesh->GetNumFaces(); f++) { CConversionFace* pFace = pMesh->GetFace(f); flTotalArea += pFace->GetUVArea(); } } raytrace::CRaytracer* pTracer = NULL; if (m_eAOMethod == AOMETHOD_RAYTRACE) { m_pWorkListener->SetAction("Building tree", 0); pTracer = new raytrace::CRaytracer(m_pScene); pTracer->AddMeshesFromNode(m_pScene->GetScene(0)); pTracer->BuildTree(); srand((unsigned int)time(0)); } if (m_eAOMethod == AOMETHOD_RAYTRACE && GetNumberOfProcessors() > 1) m_pWorkListener->SetAction("Dispatching jobs", (size_t)(flTotalArea*m_iWidth*m_iHeight)); else m_pWorkListener->SetAction("Rendering", (size_t)(flTotalArea*m_iWidth*m_iHeight)); size_t iRendered = 0; if (m_pScene->GetNumScenes()) GenerateNodeByTexel(m_pScene->GetScene(0), pTracer, iRendered); if (m_eAOMethod == AOMETHOD_RAYTRACE) { RaytraceJoinThreads(); RaytraceCleanupThreads(); delete pTracer; } }
int main(int argc, char * argv[]) { BigAllocUseHugePages = false; if (3 != argc && 4 != argc) { usage(); } if (4 == argc) { if (!strcmp(argv[3],"-b")) { matchBothWays = true; } else { usage(); } } static const char *genomeSuffix = "Genome"; size_t filenameLen = strlen(argv[1]) + 1 + strlen(genomeSuffix) + 1; char *fileName = new char[strlen(argv[1]) + 1 + strlen(genomeSuffix) + 1]; snprintf(fileName,filenameLen,"%s%c%s",argv[1],PATH_SEP,genomeSuffix); genome = Genome::loadFromFile(fileName); if (NULL == genome) { fprintf(stderr,"Unable to load genome from file '%s'\n",fileName); return -1; } delete [] fileName; fileName = NULL; inputFileName = argv[2]; unsigned nThreads; #ifdef _DEBUG nThreads = 1; #else // _DEBUG nThreads = GetNumberOfProcessors(); #endif // _DEBUG nRunningThreads = nThreads; _int64 fileSize = QueryFileSize(argv[2]); rangeSplitter = new RangeSplitter(fileSize, nThreads); CreateSingleWaiterObject(&allThreadsDone); ThreadContext *contexts = new ThreadContext[nThreads]; for (unsigned i = 0; i < nThreads; i++) { contexts[i].whichThread = i; StartNewThread(WorkerThreadMain, &contexts[i]); } WaitForSingleWaiterObject(&allThreadsDone); _int64 nUnaligned = 0; for (unsigned i = 0; i < nThreads; i++) { nUnaligned += contexts[i].nUnaligned; } printf("%lld total unaligned\nMAPQ\tnReads\tnMisaligned\n",nUnaligned); for (int i = 0; i <= MaxMAPQ; i++) { _int64 nReads = 0; _int64 nMisaligned = 0; for (unsigned j = 0; j < nThreads; j++) { nReads += contexts[j].countOfReads[i]; nMisaligned += contexts[j].countOfMisalignments[i]; } printf("%d\t%lld\t%lld\n", i, nReads, nMisaligned); } int maxEditDistanceSeen = 0; for (unsigned i = 0; i < nThreads; i++) { } return 0; }
void CRWLock2::LeaveWrite() { for (int i = 0; i < GetNumberOfProcessors(); i++) ReleaseSRWLockExclusive(&m_lock[i]); }
void CRWLock2::EnterWrite() { for (int i = 0; i < GetNumberOfProcessors(); i++) AcquireSRWLockExclusive(&m_lock[i]); }
//=========================================================================== // CRWLock2 implementation //=========================================================================== CRWLock2::CRWLock2() { m_lock = new SRWLOCK[GetNumberOfProcessors()]; for (int i = 0; i < GetNumberOfProcessors(); i++) InitializeSRWLock(&m_lock[i]); }
int _tmain (int argc, _TCHAR * argv[]) { int g_ThreadCount; HANDLE g_hIOCP = INVALID_HANDLE_VALUE; SOCKET g_ServerSocket = INVALID_SOCKET; // Init winsock2 WSADATA wsaData; ZeroMemory(&wsaData,sizeof(WSADATA)); int retVal = -1; if( (retVal = WSAStartup(MAKEWORD(2,2), &wsaData)) != 0 ) { std::cout << "WSAStartup Failed::Reason Code::"<< retVal << std::endl; return 0; } //Create socket g_ServerSocket = WSASocket(AF_INET,SOCK_STREAM, IPPROTO_TCP, NULL,0,WSA_FLAG_OVERLAPPED); if( g_ServerSocket == INVALID_SOCKET ) { std::cout << "Server Socket Creation Failed::Reason Code::" << WSAGetLastError() << std::endl; return 0; } //bind sockaddr_in service; service.sin_family = AF_INET; service.sin_addr.s_addr = htonl(INADDR_ANY); service.sin_port = htons(8899); retVal = bind(g_ServerSocket,(SOCKADDR *)&service,sizeof(service)); if( retVal == SOCKET_ERROR ) { std::cout << "Server Soket Bind Failed::Reason Code::"<< WSAGetLastError() << std::endl; return 0; } //listen retVal = listen(g_ServerSocket,SOMAXCONN); if( retVal == SOCKET_ERROR ) { std::cout << "Server Socket Listen Failed::Reason Code::"<< WSAGetLastError() << std::endl; return 0; } g_ThreadCount = GetNumberOfProcessors()*2+2; g_hIOCP = CreateIoCompletionPort(INVALID_HANDLE_VALUE,NULL,0,g_ThreadCount); if (g_hIOCP == NULL) { std::cout << "CreateIoCompletionPort() Failed::Reason::"<< GetLastError() << std::endl; return 0; } if (CreateIoCompletionPort((HANDLE)g_ServerSocket,g_hIOCP,0,0) == NULL){ std::cout << "Binding Server Socket to IO Completion Port Failed::Reason Code::"<< GetLastError() << std::endl; return 0; } for( DWORD dwThread=0; dwThread < g_ThreadCount; dwThread++ ) { HANDLE hThread; unsigned dwThreadId; hThread = (HANDLE)_beginthreadex(NULL, 0, IocpProc, g_hIOCP, 0, &dwThreadId); if(hThread==NULL) { printf("CreateThread failed with error %d\r\n" ,GetLastError()); return 0; } CloseHandle(hThread); } while(1) { SOCKADDR_IN accpetSocketAddrIn; SOCKET acceptSocket=WSAAccept(g_ServerSocket,(sockaddr*)&accpetSocketAddrIn,NULL,NULL,0); if (acceptSocket == SOCKET_ERROR) { printf("WSAAccept failed with error %d\r\n",WSAGetLastError()); return 0; } printf("Socket number %d connected\rn",acceptSocket); LPPER_HANDLE_DATA PerHandleData=new PER_HANDLE_DATA; PerHandleData->Socket=acceptSocket; if ((CreateIoCompletionPort((HANDLE)acceptSocket,g_hIOCP,(DWORD)PerHandleData,0)) == NULL) { printf("CreateIoCompletionPort failed with error%d\rn",GetLastError()); return 0; } LPPER_IO_OPERATION_DATA PerIOData=new PER_IO_OPERATION_DATA; ZeroMemory(&(PerIOData->Overlapped),sizeof(OVERLAPPED)); ZeroMemory(PerIOData->Buffer,sizeof(PerIOData->Buffer)); PerIOData->BytesRecv = 0; PerIOData->BytesSend = 0; PerIOData->TotalSendBytes=0; PerIOData->DataBuf.len = DATA_BUFSIZE; PerIOData->DataBuf.buf = PerIOData->Buffer; PerIOData->ActiveSocket=acceptSocket; PerIOData->OperationType=IO_READ; DWORD dwRecvNumBytes=0; DWORD dwFlags=0; int iRev=WSARecv(acceptSocket, &(PerIOData->DataBuf), 1, &dwRecvNumBytes, &dwFlags, &(PerIOData->Overlapped), NULL); if (iRev == SOCKET_ERROR) { if (WSAGetLastError() != ERROR_IO_PENDING) { printf("WSARecv() failed with error %d\r\n",WSAGetLastError()); closesocket(acceptSocket); delete PerIOData; delete PerHandleData; return 0; } } } closesocket(g_ServerSocket); WSACleanup(); return 0; }
/** * Enable L3 dependent features. * * L3 features initialization requires the following series of steps. * 1. Disable L3 and DRAM scrubbers on all nodes * 2. Wait 40us for outstanding scrub results to complete * 3. Disable all cache activity in the system * 4. Issue WBINVD on all active cores * 5. Initialize Probe Filter, if supported * 6. Initialize ATM Mode, if supported * 7. Enable all cache activity in the system * 8. Restore L3 and DRAM scrubber register values * * @param[in] EntryPoint Timepoint designator. * @param[in] PlatformConfig Contains the runtime modifiable feature input data. * @param[in] StdHeader Config Handle for library, services. * * @retval AGESA_SUCCESS Always succeeds. * */ AGESA_STATUS STATIC InitializeL3Feature ( IN UINT64 EntryPoint, IN PLATFORM_CONFIGURATION *PlatformConfig, IN AMD_CONFIG_PARAMS *StdHeader ) { UINT32 CpuCount; UINT32 Socket; BOOLEAN HtAssistEnabled; BOOLEAN AtmModeEnabled; AGESA_STATUS AgesaStatus; AP_MAILBOXES ApMailboxes; AP_EXE_PARAMS ApParams; UINT32 Scrubbers[MAX_SOCKETS_SUPPORTED][L3_SCRUBBER_CONTEXT_ARRAY_SIZE]; L3_FEATURE_FAMILY_SERVICES *FamilyServices[MAX_SOCKETS_SUPPORTED]; AgesaStatus = AGESA_SUCCESS; HtAssistEnabled = TRUE; AtmModeEnabled = TRUE; IDS_HDT_CONSOLE (CPU_TRACE, " Enabling L3 dependent features\n"); // There are many family service call outs. Initialize the family service array while // cache is still enabled. for (Socket = 0; Socket < MAX_SOCKETS_SUPPORTED; Socket++) { if (IsProcessorPresent (Socket, StdHeader)) { GetFeatureServicesOfSocket (&L3FeatureFamilyServiceTable, Socket, (const VOID **) &FamilyServices[Socket], StdHeader); } else { FamilyServices[Socket] = NULL; } } if (EntryPoint == CPU_FEAT_AFTER_POST_MTRR_SYNC) { // Check for optimal settings GetApMailbox (&ApMailboxes.ApMailInfo.Info, StdHeader); CpuCount = GetNumberOfProcessors (StdHeader); if (((CpuCount == 1) && (ApMailboxes.ApMailInfo.Fields.ModuleType == 1)) || ((CpuCount == 2) && (ApMailboxes.ApMailInfo.Fields.ModuleType == 0))) { for (Socket = 0; Socket < GetPlatformNumberOfSockets (); Socket++) { // Only check for non-optimal HT Assist setting is if's supported. if ((FamilyServices[Socket] != NULL) && (FamilyServices[Socket]->IsHtAssistSupported (FamilyServices[Socket], PlatformConfig, StdHeader))) { if (FamilyServices[Socket]->IsNonOptimalConfig (FamilyServices[Socket], Socket, StdHeader)) { // Non-optimal settings. Log an event. AgesaStatus = AGESA_WARNING; PutEventLog (AgesaStatus, CPU_WARNING_NONOPTIMAL_HT_ASSIST_CFG, 0, 0, 0, 0, StdHeader); break; } } } } } else { // Disable the scrubbers. for (Socket = 0; Socket < GetPlatformNumberOfSockets (); Socket++) { if (FamilyServices[Socket] != NULL) { FamilyServices[Socket]->GetL3ScrubCtrl (FamilyServices[Socket], Socket, &Scrubbers[Socket][0], StdHeader); // If any node in the system does not support Probe Filter, disable it on the system if (!FamilyServices[Socket]->IsHtAssistSupported (FamilyServices[Socket], PlatformConfig, StdHeader)) { HtAssistEnabled = FALSE; } // If any node in the system does not support ATM mode, disable it on the system if (!FamilyServices[Socket]->IsAtmModeSupported (FamilyServices[Socket], PlatformConfig, StdHeader)) { AtmModeEnabled = FALSE; } } } // Wait for 40us WaitMicroseconds ((UINT32) 40, StdHeader); // Run DisableAllCaches on AP cores. ApParams.StdHeader = *StdHeader; ApParams.FunctionNumber = AP_LATE_TASK_DISABLE_CACHE; ApParams.RelatedDataBlock = (VOID *) &HtAssistEnabled; ApParams.RelatedBlockLength = sizeof (BOOLEAN); RunLateApTaskOnAllAPs (&ApParams, StdHeader); // Run DisableAllCaches on core 0. DisableAllCaches (&ApParams); // Family hook before initialization. for (Socket = 0; Socket < GetPlatformNumberOfSockets (); Socket++) { if (FamilyServices[Socket] != NULL) { FamilyServices[Socket]->HookBeforeInit (FamilyServices[Socket], Socket, StdHeader); } } // Activate Probe Filter & ATM mode. for (Socket = 0; Socket < GetPlatformNumberOfSockets (); Socket++) { if (FamilyServices[Socket] != NULL) { if (HtAssistEnabled) { FamilyServices[Socket]->HtAssistInit (FamilyServices[Socket], Socket, StdHeader); } if (AtmModeEnabled) { FamilyServices[Socket]->AtmModeInit (FamilyServices[Socket], Socket, StdHeader); } } } // Family hook after initialization. for (Socket = 0; Socket < GetPlatformNumberOfSockets (); Socket++) { if (FamilyServices[Socket] != NULL) { FamilyServices[Socket]->HookAfterInit (FamilyServices[Socket], Socket, StdHeader); } } // Run EnableAllCaches on core 0. EnableAllCaches (&ApParams); // Run EnableAllCaches on every core. ApParams.FunctionNumber = AP_LATE_TASK_ENABLE_CACHE; RunLateApTaskOnAllAPs (&ApParams, StdHeader); // Restore the scrubbers. for (Socket = 0; Socket < GetPlatformNumberOfSockets (); Socket++) { if (FamilyServices[Socket] != NULL) { FamilyServices[Socket]->SetL3ScrubCtrl (FamilyServices[Socket], Socket, &Scrubbers[Socket][0], StdHeader); } } } return AgesaStatus; }