资源简介
使用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
- 上一篇:八皇后图形演示 C++的
- 下一篇:c++/mfc编写的网络电话,网络语音 程序
相关资源
- 超级玛丽c++源码win32Linux平台
- [纯C语言 + Win32 API]一步一步写个围棋
- C++ 游戏疯狂的赛车
- Win32多线程程序设计--详细书签版
- Win32简易画图程序
- 我见过最漂亮的CS仿真程序openGL和C+
- libcurl-7.19.3-win32-ssl-msvc.zip
- VC++ 推箱子游戏源代码(双缓存版)
- VC++ Win32俄罗斯方块游戏源码(新)
- 自己编写的C++基于socket编程的UDP聊天
- win32 VC++ 合并 exe 和 Dll..
- Twisted-19.2.1-cp38-cp38m-win32.whl
- php-5.3.5-Win32-VC6-x64
- WIN32程序的C++编程
- Microsoft Win32 程序员参考大全5.pdf(6个
- 音乐播放器源代码 vc++ 6.0
- win32应用程序中建立对话框
- Apache2.2-win32-x86
- Win32多线程程序设计 pdf高清
- gdi+游戏框架这是一个用vc6.0写的Win3
- 百度OCR文字识别依赖库-libcurl、opens
- MathGL2.2.2.1版的Win32 Lib,配合MathGL在
- win32编程之系统托盘图标显示以及弹出
- 在MFC中使用duilib
- IP包流量分析程序.rar含程序+源码WIN
- 基于C_S结构的Socket程序设计(含源码
- 《Visual Basic 6.0 Win32 API程序设计》
- Win32开发的音乐、视频播放器
- 基于windows程序设计的视频播放器
- 基于win32的飞机大战游戏设计与实现
评论
共有 条评论