“英特尔杯”全国计算机多核程序设计大赛源码 第三题成绩0.015秒 供大家讨论

huanyun 2007-08-08 06:36:07
文件名: answer3_0.015.cpp

说明: 使用文件内存映射,在后台用线程读取文件
压缩为单bit后使用SSE计算传递闭包

源码:
/*////////////////////////////////////////
// 版权所有(C) 2000-2008 邓辉 //
// Email: denghui0815@hotmail.com //
// 文件名: answer3.cpp //
// 说明: Intel优化大赛参赛作品 //
////////////////////////////////////////*/
#include <mathimf.h>
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>
#include <tmmintrin.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <process.h>

#pragma warning( disable : 175)
#pragma warning( disable : 1684)

#define MAX_THREAD 32

const int g_nThread = 2;

const int g_1_To_32_Tab[256][8]=
{
{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,1},{0,0,0,0,0,0,1,0},{0,0,0,0,0,0,1,1},
{0,0,0,0,0,1,0,0},{0,0,0,0,0,1,0,1},{0,0,0,0,0,1,1,0},{0,0,0,0,0,1,1,1},
{0,0,0,0,1,0,0,0},{0,0,0,0,1,0,0,1},{0,0,0,0,1,0,1,0},{0,0,0,0,1,0,1,1},
{0,0,0,0,1,1,0,0},{0,0,0,0,1,1,0,1},{0,0,0,0,1,1,1,0},{0,0,0,0,1,1,1,1},
{0,0,0,1,0,0,0,0},{0,0,0,1,0,0,0,1},{0,0,0,1,0,0,1,0},{0,0,0,1,0,0,1,1},
{0,0,0,1,0,1,0,0},{0,0,0,1,0,1,0,1},{0,0,0,1,0,1,1,0},{0,0,0,1,0,1,1,1},
{0,0,0,1,1,0,0,0},{0,0,0,1,1,0,0,1},{0,0,0,1,1,0,1,0},{0,0,0,1,1,0,1,1},
{0,0,0,1,1,1,0,0},{0,0,0,1,1,1,0,1},{0,0,0,1,1,1,1,0},{0,0,0,1,1,1,1,1},
{0,0,1,0,0,0,0,0},{0,0,1,0,0,0,0,1},{0,0,1,0,0,0,1,0},{0,0,1,0,0,0,1,1},
{0,0,1,0,0,1,0,0},{0,0,1,0,0,1,0,1},{0,0,1,0,0,1,1,0},{0,0,1,0,0,1,1,1},
{0,0,1,0,1,0,0,0},{0,0,1,0,1,0,0,1},{0,0,1,0,1,0,1,0},{0,0,1,0,1,0,1,1},
{0,0,1,0,1,1,0,0},{0,0,1,0,1,1,0,1},{0,0,1,0,1,1,1,0},{0,0,1,0,1,1,1,1},
{0,0,1,1,0,0,0,0},{0,0,1,1,0,0,0,1},{0,0,1,1,0,0,1,0},{0,0,1,1,0,0,1,1},
{0,0,1,1,0,1,0,0},{0,0,1,1,0,1,0,1},{0,0,1,1,0,1,1,0},{0,0,1,1,0,1,1,1},
{0,0,1,1,1,0,0,0},{0,0,1,1,1,0,0,1},{0,0,1,1,1,0,1,0},{0,0,1,1,1,0,1,1},
{0,0,1,1,1,1,0,0},{0,0,1,1,1,1,0,1},{0,0,1,1,1,1,1,0},{0,0,1,1,1,1,1,1},
{0,1,0,0,0,0,0,0},{0,1,0,0,0,0,0,1},{0,1,0,0,0,0,1,0},{0,1,0,0,0,0,1,1},
{0,1,0,0,0,1,0,0},{0,1,0,0,0,1,0,1},{0,1,0,0,0,1,1,0},{0,1,0,0,0,1,1,1},
{0,1,0,0,1,0,0,0},{0,1,0,0,1,0,0,1},{0,1,0,0,1,0,1,0},{0,1,0,0,1,0,1,1},
{0,1,0,0,1,1,0,0},{0,1,0,0,1,1,0,1},{0,1,0,0,1,1,1,0},{0,1,0,0,1,1,1,1},
{0,1,0,1,0,0,0,0},{0,1,0,1,0,0,0,1},{0,1,0,1,0,0,1,0},{0,1,0,1,0,0,1,1},
{0,1,0,1,0,1,0,0},{0,1,0,1,0,1,0,1},{0,1,0,1,0,1,1,0},{0,1,0,1,0,1,1,1},
{0,1,0,1,1,0,0,0},{0,1,0,1,1,0,0,1},{0,1,0,1,1,0,1,0},{0,1,0,1,1,0,1,1},
{0,1,0,1,1,1,0,0},{0,1,0,1,1,1,0,1},{0,1,0,1,1,1,1,0},{0,1,0,1,1,1,1,1},
{0,1,1,0,0,0,0,0},{0,1,1,0,0,0,0,1},{0,1,1,0,0,0,1,0},{0,1,1,0,0,0,1,1},
{0,1,1,0,0,1,0,0},{0,1,1,0,0,1,0,1},{0,1,1,0,0,1,1,0},{0,1,1,0,0,1,1,1},
{0,1,1,0,1,0,0,0},{0,1,1,0,1,0,0,1},{0,1,1,0,1,0,1,0},{0,1,1,0,1,0,1,1},
{0,1,1,0,1,1,0,0},{0,1,1,0,1,1,0,1},{0,1,1,0,1,1,1,0},{0,1,1,0,1,1,1,1},
{0,1,1,1,0,0,0,0},{0,1,1,1,0,0,0,1},{0,1,1,1,0,0,1,0},{0,1,1,1,0,0,1,1},
{0,1,1,1,0,1,0,0},{0,1,1,1,0,1,0,1},{0,1,1,1,0,1,1,0},{0,1,1,1,0,1,1,1},
{0,1,1,1,1,0,0,0},{0,1,1,1,1,0,0,1},{0,1,1,1,1,0,1,0},{0,1,1,1,1,0,1,1},
{0,1,1,1,1,1,0,0},{0,1,1,1,1,1,0,1},{0,1,1,1,1,1,1,0},{0,1,1,1,1,1,1,1},
{1,0,0,0,0,0,0,0},{1,0,0,0,0,0,0,1},{1,0,0,0,0,0,1,0},{1,0,0,0,0,0,1,1},
{1,0,0,0,0,1,0,0},{1,0,0,0,0,1,0,1},{1,0,0,0,0,1,1,0},{1,0,0,0,0,1,1,1},
{1,0,0,0,1,0,0,0},{1,0,0,0,1,0,0,1},{1,0,0,0,1,0,1,0},{1,0,0,0,1,0,1,1},
{1,0,0,0,1,1,0,0},{1,0,0,0,1,1,0,1},{1,0,0,0,1,1,1,0},{1,0,0,0,1,1,1,1},
{1,0,0,1,0,0,0,0},{1,0,0,1,0,0,0,1},{1,0,0,1,0,0,1,0},{1,0,0,1,0,0,1,1},
{1,0,0,1,0,1,0,0},{1,0,0,1,0,1,0,1},{1,0,0,1,0,1,1,0},{1,0,0,1,0,1,1,1},
{1,0,0,1,1,0,0,0},{1,0,0,1,1,0,0,1},{1,0,0,1,1,0,1,0},{1,0,0,1,1,0,1,1},
{1,0,0,1,1,1,0,0},{1,0,0,1,1,1,0,1},{1,0,0,1,1,1,1,0},{1,0,0,1,1,1,1,1},
{1,0,1,0,0,0,0,0},{1,0,1,0,0,0,0,1},{1,0,1,0,0,0,1,0},{1,0,1,0,0,0,1,1},
{1,0,1,0,0,1,0,0},{1,0,1,0,0,1,0,1},{1,0,1,0,0,1,1,0},{1,0,1,0,0,1,1,1},
{1,0,1,0,1,0,0,0},{1,0,1,0,1,0,0,1},{1,0,1,0,1,0,1,0},{1,0,1,0,1,0,1,1},
{1,0,1,0,1,1,0,0},{1,0,1,0,1,1,0,1},{1,0,1,0,1,1,1,0},{1,0,1,0,1,1,1,1},
{1,0,1,1,0,0,0,0},{1,0,1,1,0,0,0,1},{1,0,1,1,0,0,1,0},{1,0,1,1,0,0,1,1},
{1,0,1,1,0,1,0,0},{1,0,1,1,0,1,0,1},{1,0,1,1,0,1,1,0},{1,0,1,1,0,1,1,1},
{1,0,1,1,1,0,0,0},{1,0,1,1,1,0,0,1},{1,0,1,1,1,0,1,0},{1,0,1,1,1,0,1,1},
{1,0,1,1,1,1,0,0},{1,0,1,1,1,1,0,1},{1,0,1,1,1,1,1,0},{1,0,1,1,1,1,1,1},
{1,1,0,0,0,0,0,0},{1,1,0,0,0,0,0,1},{1,1,0,0,0,0,1,0},{1,1,0,0,0,0,1,1},
{1,1,0,0,0,1,0,0},{1,1,0,0,0,1,0,1},{1,1,0,0,0,1,1,0},{1,1,0,0,0,1,1,1},
{1,1,0,0,1,0,0,0},{1,1,0,0,1,0,0,1},{1,1,0,0,1,0,1,0},{1,1,0,0,1,0,1,1},
{1,1,0,0,1,1,0,0},{1,1,0,0,1,1,0,1},{1,1,0,0,1,1,1,0},{1,1,0,0,1,1,1,1},
{1,1,0,1,0,0,0,0},{1,1,0,1,0,0,0,1},{1,1,0,1,0,0,1,0},{1,1,0,1,0,0,1,1},
{1,1,0,1,0,1,0,0},{1,1,0,1,0,1,0,1},{1,1,0,1,0,1,1,0},{1,1,0,1,0,1,1,1},
{1,1,0,1,1,0,0,0},{1,1,0,1,1,0,0,1},{1,1,0,1,1,0,1,0},{1,1,0,1,1,0,1,1},
{1,1,0,1,1,1,0,0},{1,1,0,1,1,1,0,1},{1,1,0,1,1,1,1,0},{1,1,0,1,1,1,1,1},
{1,1,1,0,0,0,0,0},{1,1,1,0,0,0,0,1},{1,1,1,0,0,0,1,0},{1,1,1,0,0,0,1,1},
{1,1,1,0,0,1,0,0},{1,1,1,0,0,1,0,1},{1,1,1,0,0,1,1,0},{1,1,1,0,0,1,1,1},
{1,1,1,0,1,0,0,0},{1,1,1,0,1,0,0,1},{1,1,1,0,1,0,1,0},{1,1,1,0,1,0,1,1},
{1,1,1,0,1,1,0,0},{1,1,1,0,1,1,0,1},{1,1,1,0,1,1,1,0},{1,1,1,0,1,1,1,1},
{1,1,1,1,0,0,0,0},{1,1,1,1,0,0,0,1},{1,1,1,1,0,0,1,0},{1,1,1,1,0,0,1,1},
{1,1,1,1,0,1,0,0},{1,1,1,1,0,1,0,1},{1,1,1,1,0,1,1,0},{1,1,1,1,0,1,1,1},
{1,1,1,1,1,0,0,0},{1,1,1,1,1,0,0,1},{1,1,1,1,1,0,1,0},{1,1,1,1,1,0,1,1},
{1,1,1,1,1,1,0,0},{1,1,1,1,1,1,0,1},{1,1,1,1,1,1,1,0},{1,1,1,1,1,1,1,1}
};

...全文
287 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
godss 2007-08-08
  • 打赏
  • 举报
回复
我的做法是用mapfile,两个线程分别
压缩,处理,解压3个部分,位或使用sse的128位或处理
就是同步起来麻烦些
huanyun 2007-08-08
  • 打赏
  • 举报
回复
#ifdef TEST_TIME
__int64 g_xFrequency;

void InitFrequency(void)
{
QueryPerformanceFrequency( (LARGE_INTEGER *)&g_xFrequency );
}

__int64 XGetTickCount(void)
{
__int64 nTick = -1;
QueryPerformanceCounter( (LARGE_INTEGER *)&nTick );
nTick = (__int64)(1000000 * (double)(nTick) / (double)(g_xFrequency));
return nTick;
}
#endif

typedef struct tagThreadParam
{
volatile BOOL bRun,bBeg;
int i,j,nIndex,nNum;
BYTE** ppArrayB;
}THREADPARAM;

THREADPARAM g_ThreadParam[MAX_THREAD]={0};

void XInitThreadWork(int nThread, int nNum, BYTE** ppArrayB);

unsigned int __stdcall XThreadWork(void* pParam);

void* XAlignPtr(void* pVoid, int nAlign)
{
if(nAlign <= 0)
return pVoid;
else
return (void*)(((long)pVoid + nAlign - 1) & ~(long)(nAlign-1) );
}

void check(int* pRet, int nNum)
{
int* pRight = (int *)malloc(nNum*nNum*sizeof(int)+256);
FILE *fp=fopen("right3.dat","rb");
fread(pRight,sizeof(int), nNum*nNum,fp);
fclose(fp);

if(memcmp(pRet, pRight, nNum*nNum*sizeof(int)) == 0)
printf("结果正确\n");
else
printf("结果错误\n");

free(pRight);
}

void XConver32To1(int nNum, int** ppRowSrc, BYTE** ppRowDst)
{
int x,y,nDstBXE = nNum >> 3;

for (y = 0; y < nNum; ++y)
{
int * pSrc = ppRowSrc[y];
BYTE* pDst = ppRowDst[y];
BYTE nMask = (BYTE)(0x80);
int nSrcPos= 0;
for(x = 0; x < nDstBXE; ++x, nSrcPos+=8)
{
if (pSrc[nSrcPos]) pDst[x] |= 0x80;
if (pSrc[nSrcPos+1]) pDst[x] |= 0x40;
if (pSrc[nSrcPos+2]) pDst[x] |= 0x20;
if (pSrc[nSrcPos+3]) pDst[x] |= 0x10;
if (pSrc[nSrcPos+4]) pDst[x] |= 0x08;
if (pSrc[nSrcPos+5]) pDst[x] |= 0x04;
if (pSrc[nSrcPos+6]) pDst[x] |= 0x02;
if (pSrc[nSrcPos+7]) pDst[x] |= 0x01;
}
nMask = 0x80;
for(x = nDstBXE << 3; x < nNum; ++x,++nSrcPos,nMask >>= 1)
{
if (pSrc[nSrcPos]) pDst[nDstBXE] |= nMask;
}
}
}

void XConver1To32(int nNum, int** ppRowDst, BYTE** ppRowSrc)
{
int x,y;
int nBXE = (nNum - 1) >> 3;
int nSrcOffRL = (((nNum - 1) & 7) + 1) * sizeof(int);

if(0 == nBXE)
{
for ( y = 0; y < nNum; ++y)
{
memcpy(ppRowDst[y], g_1_To_32_Tab[ppRowSrc[y][0]], nSrcOffRL);
}
}
else
{
for ( y = 0; y < nNum; ++y)
{
BYTE* pSrc = ppRowSrc[y];
int* pDst = ppRowDst[y];
int nDstPos = 0;

for(x = 0; x < nBXE; ++x, nDstPos += 8)
{
memcpy(pDst + nDstPos, g_1_To_32_Tab[pSrc[x]], 8*sizeof(int));
}

memcpy(pDst + nDstPos, g_1_To_32_Tab[pSrc[nBXE]], nSrcOffRL);
}
}
}


int main(int argc, char* argv[])
{
#ifdef TEST_TIME
InitFrequency();

__int64 start = XGetTickCount();
#endif

struct stat buf ={0};
int nNum,nTmp=1;
int *pInput,*pOutput;
BYTE* pMemoryB,*pAlignB;
int** ppAryI;
int** ppAryO;
BYTE** ppAryB;
HANDLE hFile,hFileMappingIn,hFileMappingOut,hProcess;
char szInput[256] = "test3.dat";
if(argc > 1) strcpy(szInput, argv[1]);

hProcess = GetCurrentProcess();

SetPriorityClass(hProcess, REALTIME_PRIORITY_CLASS);

hFile = CreateFile(szInput,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_FLAG_SEQUENTIAL_SCAN,
NULL);

if(hFile == INVALID_HANDLE_VALUE)
{
printf("The file does not exist\n");
exit(0);
}

hFileMappingIn = CreateFileMapping(hFile,NULL,PAGE_READONLY, 0, 0, NULL);

CloseHandle(hFile);

pInput = (int*)MapViewOfFile(hFileMappingIn, FILE_MAP_READ, 0, 0, NULL);

nNum = pInput[0];
int nSizeSrc = nNum*nNum*sizeof(int);
int nSizeSrcB = nSizeSrc >> 3;

hFile = CreateFile("result3.dat",
GENERIC_WRITE | GENERIC_READ,
FILE_SHARE_READ,
NULL,
CREATE_ALWAYS,
FILE_FLAG_SEQUENTIAL_SCAN,
NULL);

hFileMappingOut = CreateFileMapping(hFile,NULL,PAGE_READWRITE, 0, nSizeSrc, NULL);

CloseHandle(hFile);

pOutput = (int*)MapViewOfFile(hFileMappingOut, FILE_MAP_ALL_ACCESS, 0, 0, nSizeSrc);

pMemoryB = (BYTE *)malloc(nSizeSrcB + (nNum << 8) + 1024);
memset(pMemoryB, 0, nSizeSrcB + (nNum << 8)+ 1024);
pAlignB = (BYTE *)XAlignPtr((BYTE*)pMemoryB, 128);

ppAryI = (int **)malloc(nNum*sizeof(void*)*3);
ppAryO = (int **)ppAryI + nNum;
ppAryB = (BYTE**)ppAryO + nNum;
for(int n =0; n < nNum; ++n)
{
ppAryI[n] = pInput + n * nNum + 1;
ppAryO[n] = pOutput + n * nNum;
ppAryB[n] = pAlignB + n * ((((nNum >> 3) + 255) >> 8) << 8);
}

XConver32To1(nNum, ppAryI, ppAryB);

XInitThreadWork(g_nThread, nNum, ppAryB);

SetThreadAffinityMask(GetCurrentThread(), 1);

HANDLE hThread = (HANDLE)_beginthreadex(NULL, 0, XThreadWork, (void *)&g_ThreadParam[1], 0, NULL);

int i,j,k,l,nMask,nEnd = (nNum + 127) >> 7;
__m128i *pTmpI,*pTmpJ;


for(j = 0; j < nNum; ++j)
{
g_ThreadParam[1].j = j;
g_ThreadParam[1].bBeg = TRUE;
l = j >> 3;
nMask = (0x80 >> (j & 0x07));
for(i = 0; i < nNum; i+=2)
{
if(ppAryB[i][l] & nMask)
{
pTmpI = (__m128i*)ppAryB[i];
pTmpJ = (__m128i*)ppAryB[j];
for(k = 0; k < nEnd; ++k) pTmpI[k] = _mm_or_si128(pTmpI[k] , pTmpJ[k]);
}
}
while(g_ThreadParam[1].bBeg) Sleep(0);
}

XConver1To32(nNum, ppAryO, ppAryB);

free(pMemoryB);
free(ppAryI);

UnmapViewOfFile(pInput);
CloseHandle(hFileMappingIn);

#ifdef TEST_TIME
printf("耗费时间=%10.9f秒 ", (double)(XGetTickCount()-start)/1000000);
check(pOutput, nNum);
#endif

UnmapViewOfFile(pOutput);
CloseHandle(hFileMappingOut);

g_ThreadParam[1].bRun = FALSE;

return nTmp > 0 ? 0:1;
}

void XInitThreadWork(int nThread, int nNum, BYTE** ppArrayB)
{
for(int i = 0; i < nThread; ++i)
{
g_ThreadParam[i].ppArrayB = ppArrayB;
g_ThreadParam[i].bRun = TRUE;
g_ThreadParam[i].bBeg = FALSE;
g_ThreadParam[i].nIndex = i;
g_ThreadParam[i].nNum = nNum;
}
}

unsigned int __stdcall XThreadWork(void* pParam)
{
THREADPARAM* pThreadParam = (THREADPARAM*)pParam;
BYTE** ppAryB = pThreadParam->ppArrayB;
int nNum = pThreadParam->nNum;
int nEnd = (nNum+127) >> 7;

SetThreadAffinityMask(GetCurrentThread(), pThreadParam->nIndex + 1);

while(pThreadParam->bRun)
{
if(pThreadParam->bBeg)
{
int i,j,k,l,nMask;
__m128i *pTmpI,*pTmpJ;
j = pThreadParam->j;
l = j >> 3;
nMask = (0x80 >> (j & 0x07));

for(i = 1; i < nNum; i+=2)
{
if(ppAryB[i][l] & nMask)
{
pTmpI = (__m128i*)ppAryB[i];
pTmpJ = (__m128i*)ppAryB[j];
for(k = 0; k < nEnd; ++k) pTmpI[k] = _mm_or_si128(pTmpI[k] , pTmpJ[k]);
}
}
pThreadParam->bBeg = FALSE;
}
else
{
Sleep(0);
}
}

return 0;
}


Intel 946-G45/Q45系列集成显卡驱动14.37.1.5029版For Win2000/XP [13.63M] 2009年02月13日 是 Intel 946-G35/Q35系列集成显卡驱动15.12.75.4.1930版For Win7-32 [22.57M] 2009年10月29日 是 Intel B43/G41/G43/G45/Q43/Q45(包括移动版)系列芯片组集成显卡驱动14.42.11.5355版For WinXP-32/XP-64 [17.81M] 2011年05月21日 无 Intel B43/G41/G43/G45/Q43/Q45(包括移动版)系列芯片组集成显卡驱动15.17.17.2413版For Vista-32/Win7-32 [37.94M] 2011年07月04日 无 Intel B43/G41/G43/G45/Q43/Q45(包括移动版)系列芯片组集成显卡驱动15.17.17.2413版For Vista-64/Win7-64 [39.89M] 2011年07月04日 无 Intel英特尔Core i3/Core i5/Core i7系列核芯显卡驱动14.46.4.5337版For WinXP-32 [22.87M] 2011年04月21日 是 Intel英特尔Core i3/Core i5/Core i7系列核芯显卡驱动15.22.4.2418 WHQL版For Vista-32/Win7-32 [67.62M] 2011年06月24日 是 Intel英特尔Core i3/Core i5/Core i7系列核芯显卡驱动15.22.4.2418 WHQL版For Vista-64/Win7-64 [84.89M] 2011年06月24日 是 Intel英特尔GMA 3150显示驱动14.37.50.4.5260版For WinXP-32 [15.25M] 2010年05月31日 无 Intel英特尔GMA 500显示驱动3.3.0版For WinXP-32 [29.75M] 2009年12月21日 是 Intel英特尔GMA 600显示驱动8.14.6.3067版For Win7-32 [25.56M] 2011年07月25日 是 S3 DeltaChrome/GammaChrome系列显卡驱动6.14.10.2021-15.16.14j版For Win2000/XP [8.55M] 2005年09月02日 无 S3 Chrome S20/GammaChrome系列显卡驱动6.14.10.2401版For Win2000/XP [10.44M] 2008年03月14日 无 S3 Chrome 400/500系列显卡驱动6.14.10.0517 WHQL版For WinXP [18.98M] 2010年11月16日 是 VIA威盛VIA Chrome9 HC IGP图形核心驱动20.07.01i版For Win2000/XP [9.84M] 2008年10月10日 是 VIA威盛UniChrome Pro图形核心驱动22.00.01e版For Win2000/XP/Vista-32 [6.67M] 2007年12月03日 是 SiS矽统Xabre 600/Xabre 400/Xabre 200/Xabre 80显卡驱动3.57.53官方正式版For Win9x/ME/2000/XP [9.47M] 2004年03月09日 是 SiS矽统SiSM771/771/M671MX/M671/671/671FX显示驱动UniVGA5 5.25版For Vista-32/Vista-64 [14.41M] 2009年12月15日 是 SiS矽统661/662/671/672/760/761芯片组显示驱动UniVGA3 3.93版For Win2000/XP/2003 [14.41M] 2010年12月15日 是 SiS矽统SiS671/671FX/672/672FX/M671/M671MX/M672/M672MX芯片组显示驱动UniVGA5 5.29版For Win7-32/Win7-64 [14.41M] 2011年01月07日 是 SiS矽统315/315E显卡驱动3.51 WHQL版For Win98/ME/2000/XP [10.60M] 2003年09月21日 是 XGI图诚Volari V3系列显卡驱动1.16.02 WHQL官方正式版For WinXP [6.41M] 2006年06月13日 无 XGI图诚Volari Z7/Z9/Z9s/Z11系列显卡驱动1.11.03 WHQL版For Win2000/XP-32/XP-64/Vista-32/Vista-64 [8.62M] 2008年11月09日 无 XGI图诚Volariz V8/V5/V3XT系列显卡驱动1.09.75官方正式版For Win2000/XP [17.49M] 2006年04月17日 是 Matrox Millennium G450/Millennium G550系列显卡驱动2.05.01.030 SE版For Win2000/XP-32/2003-32/Vista-32 [11.55M] 2007年11月10日 是 Matrox Parhelia/P650/P690/P750/M9120/M9125/M9140系列显卡驱动2.09.04.061 SE U W7版For WinXP/2003/2008/Vista/Win7 [51.60M] 2010年11月29日 无 3dfx Voodoo 3/4/5显卡SFFT驱动1.5版For Win2000/XP/XP-64 万能网卡驱动兼容win7 / xp 万能网卡驱动兼容win7 / xp 万能网卡驱动兼容win7 / xp万能网卡驱动兼容win7 / xp 万能网卡驱动兼容win7 / xp 万能网卡驱动兼容win7 / xp万能网卡驱动兼容win7 / xp万能网卡驱动兼容win7 / xp万能网卡驱动兼容win7 / xp

567

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧