91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 1KB
    文件類型: .zip
    金幣: 2
    下載: 0 次
    發布日期: 2021-06-13
  • 語言: C/C++
  • 標簽: Win32??

資源簡介

使用Win32 API的相關知識實現矩陣的乘法運算,使用C++編寫的并行實現矩陣的乘法運算

資源截圖

代碼片段和文件信息

//?Cannon.cpp?:?定義控制臺應用程序的入口點。
#include?“StdAfx.h“
#include?“omp.h“
#include?“conio.h“
#include?“stdio.h“
#include?“stdlib.h“
#include?“math.h“

#define?N?160

void?MoveDataBlockLine_A(?int?A[][N]?int?lineNumber?)?//?A?左移一塊
{
int?ij?k?jump=N/4;
int?tmp[N/4][N/4];

for(?i=0;?i for(?j=0;?j tmp[i][j]?=?A[i+jump*lineNumber][j];?//?保存塊?A(i0)

for(?k=0;?k<3;?k++?)
{
for(?i=0;?i for(?j=0;?j A[i+jump*lineNumber][j+jump*k]?=?A[i+jump*lineNumber][j+jump*(k+1)];
}

for(?i=0;?i for(?j=0;?j A[i+jump*lineNumber][j+jump*3]?=?tmp[i][j];
}

void?MoveDataBlockLine_B(?int?B[][N]?int?lineNumber?)?//?B?上移一塊
{
int?ij?k?jump=N/4;
int?tmp[N/4][N/4];

for(?i=0;?i for(?j=0;?j tmp[i][j]?=?B[i][j+jump*lineNumber];?//?保存塊?b(0j)

for(?k=0;?k<3;?k++?)
{
for(?i=0;?i for(?j=0;?j B[i+jump*k][j+jump*lineNumber]?=?B[i+jump*(k+1)][j+jump*lineNumber];
}

for(?i=0;?i for(?j=0;?j B[i+jump*3][j+jump*lineNumber]?=?tmp[i][j];
}

void?MutiplyBlock(?int?A[][N]?int?B[][N]?int?C[][N]?int?bi?int?bj?)
{
int?ijjump=N/4;
for(?i=0;?i for(?j=0;?j C[i+jump*bi][j+jump*bj]?+=?A[i+jump*bi][j+jump*bj]?*?B[i+jump*bi][j+jump*bj];
}

int?main()
{
FILE?*fpA?*fpB?*fpC;
int?i?j?k?jump=N/4;
int?A[N][N]?B[N][N]?C[N][N];

printf(?“\n開始?計算?...“?);
fpA?=?fopen(?“A.txt“?“w+“?);
fpB?=?fopen(?“B.txt“?“w+“?);
/*?賦初值?*/
for(?i=0;?i for(?j=0;?j {
A[i][j]?=?rand()%100;??fprintf(?fpA?“\n?A[%d][%d]?=?%d?“?i?j?A[i][j]?);
B[i][j]?=?rand()%100;??fprintf(?fpB?“\n?B[%d][%d]?=?%d?“?i?j?B[i][j]?);
C[i][j]?=?0;
}
fclose(fpA);
fclose(fpB);

//?設置?omp?線程數
omp_set_num_threads(?2?);

if(?N?%?4?==?0?)
{
#pragma?omp?parallel?shared(?A?B?C?)?private(?ij?)
{
#pragma?omp?sections
{
//?第一次移動數據
#pragma?omp?section??//?一個線程用來移動A的上半部分?和?B的左半部分
{
printf(“\n?Sections?1?thread?number?%d?“?omp_get_thread_num()?);
MoveDataBlockLine_A(?A?1?);
MoveDataBlockLine_A(?A?2?);
MoveDataBlockLine_A(?A?2?);
MoveDataBlockLine_A(?A?3?);
MoveDataBlockLine_A(?A?3?);
MoveDataBlockLine_A(?A?3?);
}

#pragma?omp?section??//?一個線程用來移動A的下半部分?和?B的右半部分
{
printf(“\n?Sections?1?thread?number?%d?“?omp_get_thread_num()?);
MoveDataBlockLine_B(?B?1?);
MoveDataBlockLine_B(?B?2?);
MoveDataBlockLine_B(?B?2?);
MoveDataBlockLine_B(?B?3?);
MoveDataBlockLine_B(?B?3?);
MoveDataBlockLine_B(?B?3?);
}
}
}
//?開始循環計算
???//?先進行計算然后再移動數據
for(?k=0;?k<4;?k++?)
{
#pragma?omp?parallel?shared(?A?B?C?)?private(?ij?)
{
#pragma?omp?sections
{
#pragma?omp?section?//?一個線程用來移動A的下半部分?和?B的右半部分
{
printf(“\n?Setct

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????4198??2012-03-26?20:17??Cannon.cpp

評論

共有 條評論