Advertisement
Guest User

Untitled

a guest
Nov 29th, 2015
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.31 KB | None | 0 0
  1.  
  2. #include "cuda_runtime.h"
  3. #include "device_launch_parameters.h"
  4.  
  5. #include <stdlib.h>
  6. #include <stdio.h>
  7. #include <string.h>
  8.  
  9.  
  10. /*
  11. Kiekvienos programos failo pradþioje paraðykite atsakymus á tokius klausimus:
  12. 1. Kokia tvarka startuoja procesai? Galimi atsakymo variantai:                                  atsitiktine.
  13. 2. Kokia tvarka vykdomi procesai? Galimi atsakymo variantai:                                    atsitiktine.
  14. 3. Kiek iteracijø ið eilës padaro vienas procesas? Galimi atsakymo variantai:                   visas.
  15. 4. Kokia tvarka atspausdinami to paties masyvo duomenys? Galimi atsakymo variantai:             tokia, kokia suraðyti.
  16. */
  17.  
  18. //Sukuriam skaitiklá skaitymo veiksmams
  19. int count = 0;
  20. //Failo vardas
  21. const char fileName[] = "AmosejevasH.txt";
  22.  
  23. //Struktûra laikanti duomenis apie studentà
  24. struct Item {
  25.     char ItemName[50];
  26.     int  ItemCount;
  27.     double ItemPrice;
  28. };
  29.  
  30. //Struktûra skirta tiekëjui apraðyti
  31. struct Producer {
  32.     int ProducerNr;
  33.     int HowManyItems;
  34.     struct Item Items[50];
  35.     int totalNrOfItems;
  36. };
  37.  
  38.  
  39.  
  40. //Uþduotyje naudojamas kiekis fakultetø
  41. struct Producer Producers[5];
  42. struct Item resultArray[5];
  43. //Funkcija, naudojamas nuskaityti ir priskirti duomenis fakultetams/studentams
  44. void readData() {
  45.     int i, j;
  46.     FILE *fp;
  47.     int howManyItems;
  48.  
  49.     // 1 - keletà //2 - nieko  // 3-visus
  50.     fp = fopen("AmosejevasH.txt", "r");
  51.     for (i = 0; i < 5; i++)
  52.     {
  53.         fscanf(fp, "%d", &howManyItems);
  54.         for (j = 0; j < howManyItems; j++)
  55.         {
  56.             fscanf(fp, "%s", Producers[i].Items[j].ItemName);
  57.             fscanf(fp, "%d", &Producers[i].Items[j].ItemCount);
  58.             fscanf(fp, "%lf", &Producers[i].Items[j].ItemPrice);
  59.             Producers[i].HowManyItems++;
  60.             Producers[i].totalNrOfItems += Producers[i].Items[j].ItemCount;
  61.         }
  62.     }
  63. }
  64.  
  65.  
  66. //Funkcija, kuri atspausdina visà turimà informacijà
  67. void printNicely(){
  68.  
  69.         int j = 0;
  70.         printf("%-2s  %-10s %5s %s \n", "Nr.", "Vardas", "Kursas", "Vidurkis");
  71.         for ( j = 0; j< 5; j++){
  72.             printf("%-2d)  %-8s %5d %9.2f \n", j+1, resultArray[j].ItemName , resultArray[j].ItemCount, resultArray[j].ItemPrice);
  73.         }
  74. }
  75. __device__ void print_parallel(){
  76.  
  77.     printf("Procesas_%d\n", threadIdx.x);
  78.  
  79. }
  80.  
  81. //funkcija kuri tarpininkauja su CPU dalimi, ir paleidþia spausdinimo funkcijà vaizdo plokðtëje
  82. __global__ void executeOnGPUThread(struct Producer *f1, struct Producer *f2, struct Producer *f3, struct Producer *f4, struct Producer *f5, struct Item *it){
  83.             //Graþina gijos numerá threadIdx.x
  84.     int i = threadIdx.x;
  85.     it[i].ItemCount += f1->Items[i].ItemCount + f2->Items[i].ItemCount + f3->Items[i].ItemCount + f4->Items[i].ItemCount + f4->Items[i].ItemCount;
  86.     it[i].ItemPrice += f1->Items[i].ItemPrice + f2->Items[i].ItemPrice + f3->Items[i].ItemPrice + f4->Items[i].ItemPrice + f4->Items[i].ItemPrice;
  87. }
  88.  
  89.  
  90.  
  91. void main(){
  92.     //Nuskaitome Informacijà
  93.     readData();
  94.     //Graþiai atspausdiname viskà
  95.     printNicely();
  96.     //Iðskiriame rodykles á masyvo elementus
  97.     struct Producer *dev_f1, *dev_f2, *dev_f3, *dev_f4, *dev_f5;
  98.     struct Item *dev_item;
  99.     //Randame vieno fakulteto max dydá
  100.     int size = sizeof(struct Producer);
  101.     int itemSize = sizeof(struct Item);
  102.     //Iðskiriame tam tikrà atmnties kieká GPU.
  103.     cudaMalloc((void**)&dev_f1, size);
  104.     cudaMalloc((void**)&dev_f2, size);
  105.     cudaMalloc((void**)&dev_f3, size);
  106.     cudaMalloc((void**)&dev_f4, size);
  107.     cudaMalloc((void**)&dev_f5, size);
  108.     cudaMalloc((void**)&dev_item, itemSize *5);
  109.     //Kopijuojame fakultetus á GPU atmintá
  110.     cudaMemcpy(dev_f1, &Producers[0], size, cudaMemcpyHostToDevice);
  111.     cudaMemcpy(dev_f2, &Producers[1], size, cudaMemcpyHostToDevice);
  112.     cudaMemcpy(dev_f3, &Producers[2], size, cudaMemcpyHostToDevice);
  113.     cudaMemcpy(dev_f4, &Producers[3], size, cudaMemcpyHostToDevice);
  114.     cudaMemcpy(dev_f5, &Producers[4], size, cudaMemcpyHostToDevice);
  115.     cudaMemcpy(dev_item, resultArray, itemSize*5, cudaMemcpyHostToDevice);
  116.     //Paleidþiame funkcijà
  117.     executeOnGPUThread<<<1,5>>>( dev_f1, dev_f2, dev_f3, dev_f4, dev_f5, dev_item);
  118.    
  119.     //Palaukiame, kol GPU dalis baigs darbà
  120.     cudaDeviceSynchronize();
  121.     cudaMemcpy(resultArray, dev_item, itemSize*5, cudaMemcpyHostToDevice);
  122.     printNicely();
  123.     //Atlaisviname GPU atmintá
  124.     cudaFree(dev_f1);
  125.     cudaFree(dev_f2);
  126.     cudaFree(dev_f3);
  127.     cudaFree(dev_f4);
  128.     cudaFree(dev_f5);
  129.     cudaFree(dev_item);
  130.  
  131.      
  132.     printf("Programs finished it's work\n");
  133.     system("pause");
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement