%This code will be used to obtain the speed up of matrix multiplication
%using the NVIDIA GeForce 8800 GT
num_size_gpu = (2:5000);
num_size_cpu = (2:5000);
timer_gpu = zeros(1,size(num_size_gpu,2));
timer_cpu = zeros(1,size(num_size_gpu,2));
%Starting GPU paralell loop
for ii = 1:size(num_size_gpu,2)
a = gsingle(randn(num_size_gpu(ii),num_size_gpu(ii)));
b = gsingle(randn(num_size_gpu(ii),num_size_gpu(ii)));
tic
c = a*b;
gforce(c);
temp1 = (toc);
timer_gpu(ii) = single(temp1);
clear a b c
end
%Starting CPU loop for paralell computation
clear a b c
for ii = 1:size(num_size_cpu,2)
a = randn(num_size_cpu(ii),num_size_cpu(ii));
b = randn(num_size_cpu(ii),num_size_cpu(ii));
tic
c = a*b;
timer_cpu(ii) = toc;
end
speed_x = double(timer_cpu./timer_gpu);
subplot(3,1,1)
plot(num_size_cpu,speed_x,'blue')
grid on
xlabel('Dimensions of square matrix');
ylabel('Speed up by');
title({'NVIDIA GeForece 8800 GT with 112 processors @ 1.476 GHz';'Intel(R) CORE(TM)2 QUAD CPU @ 2.66 GHz';'A comparitive study of matrix multiplication speed'})
subplot(3,1,2)
plot(num_size_cpu,double(timer_gpu),'blue');
grid on
xlabel('Dimensions of square matrix');
ylabel('Time taken GPU')
subplot(3,1,3)
plot(num_size_cpu,timer_cpu,'blue');
grid on
xlabel('Dimensions of square matrix');
ylabel('Time taken CPU')
print -djpeg mat_mult_5000