OpenMP之矩阵转置

// HanNuo.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include"omp.h"
#include<Windows.h>
#include<iostream>
#include<time.h>
#define NUM_THREADS 2

using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
	omp_set_num_threads(NUM_THREADS);
	 int a[400][400];//inint matrix
	 int counter=1;
     for(int  i=0;i<400;i++)
     {
         for(int  j=0;j<400;j++)
         {
             a[i][j]=counter;
             counter++;
         }
     }
     // for(int i=0;i<20;i++)
      //   {
      //    for(int j=0;j<20;j++)
       //    cout<<a[i][j]<<" ";
       //   cout<<endl;
        // }
	  cout<<"parallel begin"<<endl;
	  clock_t time_begin=clock();
	  int i=0,j=0;
#pragma omp parallel for private(i,j)
     for(i=0;i<400;i++)
      for(j=i+1;j<400;j++)//从i+1开始。执行交换
      {
		 long  tmp=0;
       tmp=a[i][j];
       a[i][j]=a[j][i];
       a[j][i]=tmp;
      }
	clock_t time_end=clock();
	double s1=time_end-time_begin;
	 cout<<"parallel end"<<endl;
	 cout<<"parallel time ="<<s1<<endl;
	 //============================================================================================================
	 time_begin=clock();
	 cout<<"serail begin"<<endl;
	   for(int  i=0;i<400;i++)
      for(int j=i+1;j<400;j++)//从i+1开始。执行交换
      {
		int tmp=0;
       tmp=a[i][j];
       a[i][j]=a[j][i];
       a[j][i]=tmp;
      }
	  time_end=clock();
	  cout<<"serail end"<<endl;
	  double s2=time_end-time_begin;
	  cout<<"serail time="<<s2<<endl;

	 system("pause");
	return 0;
}
时间: 2024-08-24 21:56:03

OpenMP之矩阵转置的相关文章

基于OpenMP的矩阵乘法实现及效率提升分析

一.  矩阵乘法串行实现 例子选择两个1024*1024的矩阵相乘,根据矩阵乘法运算得到运算结果.其中,两个矩阵中的数为double类型,初值由随机数函数产生.代码如下: #include <iostream> #include <omp.h> // OpenMP编程需要包含的头文件 #include <time.h> #include <stdlib.h> using namespace std; #define MatrixOrder 1024 #def

(算法)求矩阵转置

题目: 编写一个函数,输入为一个矩阵,打印这个矩阵转置后的结果. 例: 输入矩阵是 1,2,3,4 5,6,7,8 9,10,11,12 13,14,15,16 打印结果应该是 13,9,5,1 14,10,6,2 15,11,7,3 16,12,8,4 思路: 1.从外到内,一圈一圈地循环替换: 2.对矩阵进行从[i,j]到[j,i]的交换,然后在进行列的首尾交换: 代码: #include<iostream> #include<vector> using namespace s

矩阵转置

#include<stdio.h>main(){ int a[2][3],b[3][2]; int i,j; //input a for(i=0;i<2;i++) { for(j=0;j<3;j++) { scanf("%d",&a[i][j]); } } // zhuanzhi b for(j=0;j<3;j++) { for(i=0;i<2;i++) { b[j][i]=a[i][j]; } } //ouput bfor(j=0;j<

10:矩阵转置

10:矩阵转置 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 输入一个n行m列的矩阵A,输出它的转置AT. 输入 第一行包含两个整数n和m,表示矩阵A的行数和列数.1 <= n <= 100,1 <= m <= 100.接下来n行,每行m个整数,表示矩阵A的元素.相邻两个整数之间用单个空格隔开,每个元素均在1~1000之间. 输出 m行,每行n个整数,为矩阵A的转置.相邻两个整数之间用单个空格隔开. 样例输入 3 3 1 2 3 4 5

C语言之基本算法42—矩阵转置及按行按列排序

//矩阵转置 按行按列排序 /* ================================================================== 题目:输入m*n矩阵,按行升序排列输出. 输入: 4 3 5 6 2 9 8 1 2 8 7 1 2 3 8 输出: 2 3 4 5 6 1 2 8 8 9 1 2 3 7 8 ================================================================== */ #includ

java 矩阵转置算法

工作中用到了行列转置,把这两种情况的算法记下来,以便后用 1.行列数相等的转置 1 /** 2 * @description 矩阵转置 3 * @author oldmonk 4 * @time 2017年8月18日 5 */ 6 public class test { 7 8 public static void main(String [] args) { 9 int data [][] = new int [] [] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8,

python矩阵转置 以及 计算余弦

矩阵转置: http://stackoverflow.com/questions/5954603/python-numpy-transpose http://www.imissy.cn/?p=105 余弦计算: http://stackoverflow.com/questions/1823293/optimized-method-for-calculating-cosine-distance-in-python

Oracle使用SQL实现矩阵转置

在使用数据库使用报表时,往往会遇到矩阵转置.这个需求在Excel是很容易实现的,但很多人都不知道怎么用Oracle数据库实现,下面给大家展示几种使用SQL实现的方法. 需求:表1转置成表2 测试数据: CREATE TABLE TMP AS SELECT 'A1' AS A, 'B1' AS B FROM DUAL UNION ALL SELECT 'A2' AS A, 'B2' AS B FROM DUAL UNION ALL SELECT 'A3' AS A, 'B3' AS B FROM

1154: 零起点学算法61——矩阵转置

1154: 零起点学算法61--矩阵转置 Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted: 1324  Accepted: 698[Submit][Status][Web Board] Description 现要求你把一个矩阵行列转置后输出,注意行数和列数可能不相同的. Input 多组测试数据,每组测试数据先在一行输入n 和m ,表示这个矩阵的行数和列数(1 < n,m <= 10) 然后是n行