那只好用繼續想辦法榨出硬體效能
先想辦法把 CPU 多核心的能力用上
使用 OpenMP
但是發現 VC++ 6 不支援
看起來要更新了 但是之前安裝的 VS2008 win32一直跑不起來 rc.exe mt.exe 找不到
一口氣全部解決 安裝
Windows SDK for Windows Server 2008 and .NET Framework 3.5
可以用後就想把 VC++ 6 的程式 porting 到 VS2008 去
#include <omp.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <tchar.h>
void Test( int n )
{
for( int i = 0; i < 999999999; ++ i )
{
//do nothing, just waste time
}
printf( "%d, ", n );
}
int main(int argc, char* argv[])
{
clock_t start_time, end_time;
float total_time = 0;
start_time = clock(); /* mircosecond */
#pragma omp parallel for
for( int i = 0; i < 10; ++ i )
Test( i );
end_time = clock();
total_time = (float)(end_time - start_time)/CLOCKS_PER_SEC;
printf("Time : %f sec \n", total_time);
}
執行結果
5, 0, 6, 1, 7, 2, 8, 3, 9, 4, Time : 26.672001 sec
請按任意鍵繼續 . . .
久違的 100% CPU使用率
如果把紅色的 code 拿掉會變成
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, Time : 42.844002 sec
請按任意鍵繼續 . . .
只用到一顆核心在跑 右邊那顆
ps. 在 debug mode 上述的 code 才可以測試 因為迴圈是空的 在 release mode 這種迴圏會被最佳化
至於 NVidia 的 CUDA ... 恩 先讓我弄到張 8系列以上的顯卡吧 Orz
ps2. OpenMP on VC6 其實 VC6 也可以用 OpenMP, 只是好像是把 compiler 換掉了 XD
沒有留言:
張貼留言
開放匿名留言 請大家注意網路禮儀