I read that in multiprocessor system each processor has its own copy of interrupt descriptor table (IDT) and they use one copy of global descriptor table (GDT).
Why processors can't use one copy of IDT?
I assume from the use of the term GDT that you are asking about an x86 and/or x86-64 processor.
Each x86 processor (hardware thread, to be precise) has its own separate IDTR and GDTR registers. This allows, but does not require, the OS to use a distinct IDT and GDT on each processor.
The interrupt vector space in x86 is 8 bits, of which 32 are reserved, leaving 224 interrupts. In many platforms this is not enough distinct interrupt vectors. By using a distinct IDT on each processor, the OS can assign up to 224 distinct interrupt vectors per processor. (However, you should not assume that all OSes do this.)
In contrast, the GDT can hold up to 8191 descriptors*, which is far, far more than most OSes use, so there is rarely any need for an OS to use separate GDTs on each processor.
* GDT entry 0 cannot be used, because a selector with index 0 is considered a null selector. In 64-bit mode, system descriptors are extended to 16 bytes, while code and data descriptors remain 8 bytes, so the total number of entries possible in the GDT depends on the types of descriptors present.