加为好友
发送私信
在线聊天
im2web
等级:
可用分等级:中农
总技术分:171
总技术分排名:80280
发表于:2008-08-25 10:42:05 12 楼 得分:0
#include <windows.h> #include <stdio.h> #include <stdlib.h> #include <time.h> //using namespace std; DWORD WINAPI fun1(void *); DWORD WINAPI fun2(void *); volicate float x[1000][1000] = {0}; float y[1000][1000] = {0}; float z[1000][1000] = {0}; void funtime(float *); int main(int argc, char *argv) { fprintf(stderr, " funtime z %d\n", (unsigned int)time(NULL)); funtime(&(z[0][0])); fprintf(stderr, " funtime z %d\n", (unsigned int)time(NULL)); fprintf(stderr, " begin %d\n", (unsigned int)time(NULL)); HANDLE h1 = CreateThread(NULL, NULL, fun1,NULL,NULL,NULL); HANDLE h2 = CreateThread(NULL, NULL, fun2,NULL,NULL,NULL); ::WaitForSingleObject(h2, INFINITE); ::WaitForSingleObject(h1, INFINITE); fprintf(stderr, " end %d\n", (unsigned int)time(NULL)); CloseHandle(h1); CloseHandle(h2); getchar(); return 0; } DWORD WINAPI fun1(void *) { fprintf(stderr, " thread1 begin %d\n", (unsigned int)time(NULL)); funtime(&(x[0][0])); ::Sleep(1000 *10); fprintf(stderr, " thread1 end %d\n", (unsigned int)time(NULL)); return 0; } DWORD WINAPI fun2(void *) { fprintf(stderr, " thread2 begin %d\n", (unsigned int)time(NULL)); funtime(&(y[0][0])); ::Sleep(1000 *5); fprintf(stderr, " thread2 end %d\n", (unsigned int)time(NULL)); return 0; } void funtime(float *table) { unsigned int t = time(NULL); float PI = 3.14156925354; for (int k =0; k < 100;k++) for (int x = 0; x < 1000; ++x) for (int y = 0; y < 1000; ++y) { *(table +x*1000+ y) = PI *(t+x)*(t+y); t++; } } 这个代码 在多核 和单核上面的效果是不一样的。 仔细分析 就知道 多核 的多 多在那里了 而上面的代码 多核和单核则基本没差距。
修改
删除
举报
引用
回复