I am implementing a neural-network to train mnist dataset with **torch7(LUA5.3)**, but I found 2 strange problems in torch:  

**1.** Convolution layer is slower than full connected linear layer when in same data size.  

**2.** Convolution layer is slower in GPU(TITAN X with cuda9.0) than in CPU 

I do some simple experiments to prove that:  

**For the first problem:**  

(1) when batch size is 500 and feature dimensions is 784(28 \* 28), for a full connected linear layer, input size is 500\*784 and output size is 300(we set it to 300), it takes 1.67s to forward the data 

[picture: 784 \* 300 full connected linear layer](https://i.stack.imgur.com/KNsSO.jpg) 

(2) With the same batch size, convolution layer takes 3.07s, input2's size is 500\*1\*28\*28, means 500 pictures with 1 channel and picture is 28\*28. Convolution layer has 1 input plane and 3 output planes, kernel size is 2\*2, step is 1, padding is 0 

[picture: convolution layer](https://i.stack.imgur.com/KpaQo.jpg)

**For the second problem:**  

(1) With same data size and neural network structure, it takes even more time in GPU than in CPU: 

[picture: It takes 11s in GPU however 3.07s in CPU](https://i.stack.imgur.com/aq3LE.jpg)

(2) Linear layer work well, it takes less time in GPU than in CPU indeed 

[picture: it takes only 0.27s when running full connected linear layer in GPU](https://i.stack.imgur.com/ijeOk.jpg)

However, it is obvious that convolution layer has less weights and need less computation, I think it should be much faster than linear layer. Moreover, GPU should not slower than CPU.

Thanks in advance