Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <ctime>
- #include <stdlib.h>
- #include <iostream>
- #include <iomanip>
- #include <numeric>
- #include <chrono>
- #define sizeMatrix 300
- #define cycleValue 100000
- #pragma optimize("", off)
- clock_t MatrixFunction1(int matrix1[sizeMatrix][sizeMatrix], int matrix2[sizeMatrix][sizeMatrix]) {
- clock_t begin = clock();
- for (int k = 0; k < cycleValue; k++) {
- for (int i = 0; i < sizeMatrix; i++) {
- for (int j = 0; j < sizeMatrix; j++) {
- matrix2[i][j] = matrix1[i][j];
- }
- }
- }
- clock_t end = clock();
- return end - begin;
- }
- #pragma optimize("", on)
- clock_t mama(int matrix1[sizeMatrix][sizeMatrix], int matrix2[sizeMatrix][sizeMatrix])
- {
- clock_t begin1 = clock();
- for (int k = 0; k < cycleValue; k++) {
- for (int i = 0; i < sizeMatrix; i++) {
- for (int j = 0; j < sizeMatrix; j++) {
- matrix2[i][j] = matrix1[i][j];
- }
- }
- }
- clock_t end1 = clock();
- return end1 - begin1;
- }
- bool checkAnswer(int matrix1[sizeMatrix][sizeMatrix], int matrix2[sizeMatrix][sizeMatrix]) {
- for (int i = 0; i < sizeMatrix; i++) {
- for (int j = 0; j < sizeMatrix; j++) {
- if (matrix2[i][j] != matrix1[i][j]) {
- return false;
- break;
- }
- }
- }
- return true;
- }
- int main()
- {
- int intSize = sizeof(int);
- int doubleIntSize = sizeof(int) * 2;
- srand(time(NULL));
- int matrix1[sizeMatrix][sizeMatrix];
- int matrix2[sizeMatrix][sizeMatrix];
- for (int i = 0; i < sizeMatrix; i++) {
- for (int j = 0; j < sizeMatrix; j++) {
- matrix1[i][j] = rand() % 100;
- }
- }
- if (!checkAnswer(matrix1, matrix2))
- {
- printf("Cloun\n");
- }
- clock_t begin2 = clock();
- for (int c = 0; c < cycleValue; c++) {
- _asm {
- xor esi, esi
- mov al, sizeMatrix
- mov bl, sizeMatrix
- mul bl
- mov ecx, eax
- loop1 :
- mov edx, matrix1[esi]
- mov matrix2[esi], edx
- add esi, 4
- loop loop1
- }
- }
- clock_t end2 = clock();
- if (!checkAnswer(matrix1, matrix2))
- {
- printf("Cloun\n");
- }
- clock_t begin3 = clock();
- int Counter = sizeMatrix * sizeMatrix * intSize * doubleIntSize / 64;
- for (int c = 0; c < cycleValue; c++) {
- _asm {
- xor esi,esi
- mov ebx, Counter
- cycle:
- movq MM1, matrix1[esi]
- movq matrix2[esi],MM1
- add esi,8
- dec ebx
- cmp ebx,0
- jne cycle
- }
- }
- clock_t end3 = clock();
- if (!checkAnswer(matrix1, matrix2))
- {
- printf("Cloun\n");
- }
- clock_t asd = MatrixFunction1(matrix1, matrix2);
- double time = asd / CLOCKS_PER_SEC;
- //time /= CLOCKS_PER_SEC;
- std::cout << "Time in c without optimize : " << time << std::endl;
- std::cout << "Time in c without optimize : " << time << std::endl;
- double time1 = (double)(mama(matrix1,matrix2)) / CLOCKS_PER_SEC;
- //printf("Time on c with optimization: %lf ", time1);
- std::cout << "Time on c with optimization : " << time1 << std::endl;
- double time2 = (double)(end2 - begin2) / CLOCKS_PER_SEC;
- //printf("Time on asm: %lf ", time2);
- std::cout << "Time on asm: " << time2 << std::endl;
- double time3 = (double)(end3 - begin3) / CLOCKS_PER_SEC;
- //printf("Time on asm with MMX: %lf ", time3);
- std::cout << "Time on asm with MMX: " << time3 << std::endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement