Program that computes square matrix multiplication, C/C++ Programming

Assignment Help:

Goal:

Design a program that computes square matrix multiplication on GPU using CUDA. Write the code in C. In particular, your implementation should obey the following requirements:

1. The program must be general enough to handle matrix sizes beyond the GPU capacity.

2. The GPU capacity should not be hardcoded, but should be queried during execution.

3. The kernel implementation should be such that the execution configuration (number of blocks and threads/block) affects the performance but not the results of the kernel invocation.

Methodology

NOTE: In this lab, you will not use SHARED MEMORY!

The program will be tested on the workstations and the CUDA server using the following matrix sizes:

1. Use C++ compiler (g++) to compile your code, and use new operator instead of malloc() to dynamically allocate memory (malloc may fail on very large memory allocations).

2. Try to design the data structures so to minimize the number of memory transactions between host and device (CPU and GPU).

3. DO NOT START TO CODE IMMEDIATELY. Spend some time designing your solution.

i. How do you handle matrix sizes exceeding the GPU capacity?

ii. How do you represent the matrices?

iii. Which memory transfers are involved with matrices within and beyond the GPU capacity?

iv. When designing the kernel, which work is performed by each thread? How do you correlate each thread with the data it processes?

4. Kernel calls use shared memory and registers. Your kernel should not use shared memory. To see how many registers are used by each thread, you can have a look at the GPU assembly file.The assembly file (called PTX file) can be generated by calling:

nvcc -ptx myfile.cu

This will generate myfile.ptx.

The PTX file will show you the assembly representation of your kernel. In particular, it will show you the code execute by each thread (as you know, all threads execute the same code!). The PTX file will include an area where the registers are declared. For example:

.reg .u16 %rh<4>;//16 bit registers

.reg .u32 %r<9>; //32 bit registers

.reg .u64 %rd<10>;//64 bit registers

.reg .pred %p<3>; // registers used for predication

If you know: how many registers are used by each thread and how many registers are available on the GPU, you can easily determine what is the maximum number of threads that you can run (for your particular kernel).

5. Use the occupancy calculator to calculate the optimal point for configuring the kernel.

Questions:

1. Run your kernel with different number of blocks and of threads/block and see how this affects the performance. Report GPU occupancy and execution time, and discuss the results. Consider execution configurations that are trivially bad, and compare them with good execution configurations. How do you know in advance that some configurations are "bad"? And what is a "good" execution configuration?

2. What is the largest execution configuration that you can use without exceeding the resources available on the GPU in use?


Related Discussions:- Program that computes square matrix multiplication

C program to compute the factorial, Write a C program to compute the factor...

Write a C program to compute the factorial of  5 i.e 1x2x3x4x5 etc #include stdio.h   void main()   {   char promt;      int factor;   factor = 1*2*3*4*5;   printf("The fac

Compiler design-limit the methods, Problem : Compiler Design - Limit the me...

Problem : Compiler Design - Limit the methods Rahul is a newbie to the programming and while learning the programming language he came to know the following rules: ·

Area under curve. , Write a program to find the area under the curve y = f(...

Write a program to find the area under the curve y = f(x) between x = a and x = b, integrate y = f(x) between the limits of a and b. The area under a curve between two points can b

Padovan string, padovan string for n natural numbers p(n)=1,p(n)=2,p(n)=3 a...

padovan string for n natural numbers p(n)=1,p(n)=2,p(n)=3 and use padovan formul to get output 1

Programming, hello i have about 15 hours the dead line I Need a program in...

hello i have about 15 hours the dead line I Need a program in c language that''s determine the router ip or the gateway ip of the current NIC example the router ip is: 192.168.1.1

What is a hash function, What is a hash function? Hash function: This ...

What is a hash function? Hash function: This is the method from the set 'K' of keys into the set 'L' of memory addresses.   H: K → L These are used to verify the address

What is the difference between structure and class, What is the difference ...

What is the difference between structure and class? - Members of structures are public while those of a class are private. - Classes provide data hiding while structures don

String, Byteland county is very famous for luminous jewels. Luminous jewels...

Byteland county is very famous for luminous jewels. Luminous jewels are used in making beautiful necklaces. A necklace consists of various luminous jewels of particular colour. Nec

What is a conversion constructor c++, A constructor that accepts one argume...

A constructor that accepts one argument of a dissimilar type.

State six typical application of primary cells, Normal 0 false ...

Normal 0 false false false EN-IN X-NONE X-NONE MicrosoftInternetExplorer4

Write Your Message!

Captcha
Free Assignment Quote

Assured A++ Grade

Get guaranteed satisfaction & time on delivery in every assignment order you paid with us! We ensure premium quality solution document along with free turntin report!

All rights reserved! Copyrights ©2019-2020 ExpertsMind IT Educational Pvt Ltd