예제 #1
0
/**
 *  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;
}
예제 #2
0
/**
 *  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;
}
예제 #3
0
파일: cpuHwC1e.c 프로젝트: AdriDlu/coreboot
/**
 *  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;
}
예제 #4
0
파일: ao.cpp 프로젝트: ezhangle/SMAK
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;
    }
}
예제 #5
0
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;
}
예제 #6
0
파일: RWLock2.cpp 프로젝트: chaelim/RWLock
void CRWLock2::LeaveWrite() {
    for (int i = 0; i < GetNumberOfProcessors(); i++)
        ReleaseSRWLockExclusive(&m_lock[i]);
}
예제 #7
0
파일: RWLock2.cpp 프로젝트: chaelim/RWLock
void CRWLock2::EnterWrite() {
    for (int i = 0; i < GetNumberOfProcessors(); i++)
        AcquireSRWLockExclusive(&m_lock[i]);
}
예제 #8
0
파일: RWLock2.cpp 프로젝트: chaelim/RWLock
//===========================================================================
// CRWLock2 implementation
//===========================================================================
CRWLock2::CRWLock2() {
    m_lock = new SRWLOCK[GetNumberOfProcessors()];
    for (int i = 0; i < GetNumberOfProcessors(); i++)
        InitializeSRWLock(&m_lock[i]);
}
예제 #9
0
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;
}
예제 #10
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;
}